Selaa lähdekoodia

基础学生导入

caozixuan 1 vuosi sitten
vanhempi
commit
ea85a4f109

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

@@ -14,6 +14,7 @@ import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import com.qmth.teachcloud.common.service.TBTaskService;
 import com.qmth.teachcloud.common.service.TBTaskService;
 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 org.apache.commons.collections4.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -59,7 +60,9 @@ public class AsyncSysUserDataImportService extends AsyncImportTaskTemplete {
             //错误数据,生成文件
             //错误数据,生成文件
             if (result.containsKey(SystemConstant.ERROR_DATA_LIST)) {
             if (result.containsKey(SystemConstant.ERROR_DATA_LIST)) {
                 List<SysUserErrorExportDto> errorDataList = (List<SysUserErrorExportDto>) result.get(SystemConstant.ERROR_DATA_LIST);
                 List<SysUserErrorExportDto> errorDataList = (List<SysUserErrorExportDto>) result.get(SystemConstant.ERROR_DATA_LIST);
-                super.createErrorFile(tbTask, SysUserErrorExportDto.class, errorDataList);
+                if (CollectionUtils.isNotEmpty(errorDataList)) {
+                    super.createErrorFile(tbTask, SysUserErrorExportDto.class, errorDataList);
+                }
             }
             }
 
 
 //            // 执行用户同步数据
 //            // 执行用户同步数据

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

@@ -1448,7 +1448,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     continue;
                     continue;
                 }
                 }
                 map.put(SystemConstant.DATA_COUNT, sysUserImportDtoList.size());
                 map.put(SystemConstant.DATA_COUNT, sysUserImportDtoList.size());
-                List<Integer> errorIndex = new ArrayList<>();
+                List<SysUserImportDto> removeDataList = new ArrayList<>();
                 Map<String, Integer> phoneNumberMap = new HashMap<>();
                 Map<String, Integer> phoneNumberMap = new HashMap<>();
                 for (int y = 0; y < Objects.requireNonNull(sysUserImportDtoList).size(); y++) {
                 for (int y = 0; y < Objects.requireNonNull(sysUserImportDtoList).size(); y++) {
                     SysUserImportDto sysUserImportDto = (SysUserImportDto) sysUserImportDtoList.get(y);
                     SysUserImportDto sysUserImportDto = (SysUserImportDto) sysUserImportDtoList.get(y);
@@ -1498,7 +1498,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     }
                     }
                     if (Objects.nonNull(phoneNumber)) {
                     if (Objects.nonNull(phoneNumber)) {
                         if (phoneNumberMap.containsKey(phoneNumber)) {
                         if (phoneNumberMap.containsKey(phoneNumber)) {
-                            errorStringJoiner.add("[手机号]和第" + phoneNumberMap.get(phoneNumber) + "重复");
+                            errorStringJoiner.add("excel中的[手机号]不能重复");
                         } else {
                         } else {
                             phoneNumberMap.put(phoneNumber, y);
                             phoneNumberMap.put(phoneNumber, y);
                         }
                         }
@@ -1507,15 +1507,13 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     if (errorString.length() > 0) {
                     if (errorString.length() > 0) {
                         sysUserErrorExportDto.setErrorMsg(errorString);
                         sysUserErrorExportDto.setErrorMsg(errorString);
                         errorDataList.add(sysUserErrorExportDto);
                         errorDataList.add(sysUserErrorExportDto);
-                        errorIndex.add(y);
+                        removeDataList.add(sysUserImportDto);
                     } else {
                     } else {
                         // 校验通过的数据
                         // 校验通过的数据
                         successInteger.getAndIncrement();
                         successInteger.getAndIncrement();
                     }
                     }
                 }
                 }
-                for (int index : errorIndex) {
-                    sysUserImportDtoList.remove(index);
-                }
+                sysUserImportDtoList.removeAll(removeDataList);
             }
             }
             if (!errorDataList.isEmpty()) {
             if (!errorDataList.isEmpty()) {
                 map.put(SystemConstant.ERROR_DATA_LIST, errorDataList);
                 map.put(SystemConstant.ERROR_DATA_LIST, errorDataList);

BIN
distributed-print/src/main/resources/temps/user.xlsx


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

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.common.bean.dto.excel;
 import com.qmth.teachcloud.common.annotation.ExcelImportTempleteVaild;
 import com.qmth.teachcloud.common.annotation.ExcelImportTempleteVaild;
 import com.qmth.teachcloud.common.annotation.ExcelNote;
 import com.qmth.teachcloud.common.annotation.ExcelNote;
 import com.qmth.teachcloud.common.annotation.ExcelProperty;
 import com.qmth.teachcloud.common.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
 
 
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.io.Serializable;
@@ -42,6 +43,9 @@ public class BasicCourseImportDto implements Serializable {
     @ExcelProperty(name = "工号", width = 30, index = 6)
     @ExcelProperty(name = "工号", width = 30, index = 6)
     private String code;
     private String code;
 
 
+    @ApiModelProperty("行索引")
+    private Integer rowIndex;
+
     public String getName() {
     public String getName() {
         return name;
         return name;
     }
     }
@@ -89,4 +93,12 @@ public class BasicCourseImportDto implements Serializable {
     public void setClazz(String clazz) {
     public void setClazz(String clazz) {
         this.clazz = clazz;
         this.clazz = clazz;
     }
     }
+
+    public Integer getRowIndex() {
+        return rowIndex;
+    }
+
+    public void setRowIndex(Integer rowIndex) {
+        this.rowIndex = rowIndex;
+    }
 }
 }

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/RoleTypeEnum.java

@@ -19,7 +19,7 @@ public enum RoleTypeEnum {
     MARKER_LEADER("科组长"),
     MARKER_LEADER("科组长"),
     SUBJECT_TEACHER("学科老师"),
     SUBJECT_TEACHER("学科老师"),
     ASSIGN_TEACHER("命题老师"),
     ASSIGN_TEACHER("命题老师"),
-    SCHOOL_TEACHER("老师"),
+    SCHOOL_TEACHER("学校老师"),
     ASSISTANT("学院秘书");
     ASSISTANT("学院秘书");
 
 
     RoleTypeEnum(String desc) {
     RoleTypeEnum(String desc) {

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

@@ -13,6 +13,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -90,7 +91,7 @@ public interface BasicCourseService extends IService<BasicCourse> {
      *
      *
      * @param finalList 基础课程数据集合
      * @param finalList 基础课程数据集合
      */
      */
-    List<BasicCourseParams> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList);
+    List<BasicCourseParams> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<Integer,List<String>> errorMap);
 
 
     /**
     /**
      * @param schoolId
      * @param schoolId

+ 91 - 47
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -1,6 +1,6 @@
 package com.qmth.teachcloud.common.service.impl;
 package com.qmth.teachcloud.common.service.impl;
 
 
-import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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;
@@ -26,7 +26,6 @@ import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ExcelUtil;
 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 com.qmth.teachcloud.common.util.excel.ExcelError;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -245,95 +244,131 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
 
 
     @Override
     @Override
     public List<BasicCourseParams> executeImportBasicCourseLogic(MultipartFile file) throws IOException, NoSuchFieldException {
     public List<BasicCourseParams> executeImportBasicCourseLogic(MultipartFile file) throws IOException, NoSuchFieldException {
+        Map<Integer,List<String>> errorMap = new HashMap<>();
         InputStream inputStream = file.getInputStream();
         InputStream inputStream = file.getInputStream();
         List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(BasicCourseImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
         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<>();
             Map<String, BasicCourseImportDto> courseDtoMap = new HashMap<>();
             for (int i = 0; i < finalExcelList.size(); i++) {
             for (int i = 0; i < finalExcelList.size(); i++) {
                 LinkedMultiValueMap<Integer, Object> excelMap = finalExcelList.get(i);
                 LinkedMultiValueMap<Integer, Object> excelMap = finalExcelList.get(i);
                 List<Object> basicCourseImportDtoList = excelMap.get(i);
                 List<Object> basicCourseImportDtoList = excelMap.get(i);
-                assert basicCourseImportDtoList != null;
-                if (basicCourseImportDtoList.get(0) instanceof DescribeImportDto) {
-                    continue;
-                }
                 List<BasicCourseImportDto> duplicateData = new ArrayList<>();
                 List<BasicCourseImportDto> duplicateData = new ArrayList<>();
                 for (int y = 0; y < Objects.requireNonNull(basicCourseImportDtoList).size(); y++) {
                 for (int y = 0; y < Objects.requireNonNull(basicCourseImportDtoList).size(); y++) {
                     BasicCourseImportDto basicCourseImportDto = (BasicCourseImportDto) basicCourseImportDtoList.get(y);
                     BasicCourseImportDto basicCourseImportDto = (BasicCourseImportDto) basicCourseImportDtoList.get(y);
+                    basicCourseImportDto.setRowIndex(y + 1);
                     String courseName = basicCourseImportDto.getCourseName();
                     String courseName = basicCourseImportDto.getCourseName();
                     String courseCode = basicCourseImportDto.getCourseCode();
                     String courseCode = basicCourseImportDto.getCourseCode();
                     String teachingRoomName = basicCourseImportDto.getTeachingRoomName();
                     String teachingRoomName = basicCourseImportDto.getTeachingRoomName();
                     String clazz = basicCourseImportDto.getClazz();
                     String clazz = basicCourseImportDto.getClazz();
                     String name = basicCourseImportDto.getName();
                     String name = basicCourseImportDto.getName();
                     String code = basicCourseImportDto.getCode();
                     String code = basicCourseImportDto.getCode();
-
-                    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 emptyCheckError = ExcelUtil.checkExcelField(basicCourseImportDto);
+                    if (SystemConstant.strNotNull(emptyCheckError)) {
+                        if (errorMap.containsKey(y + 1)) {
+                            errorMap.get(y + 1).add(emptyCheckError);
+                        } else {
+                            List<String> errorInfo = new ArrayList<>();
+                            errorInfo.add(emptyCheckError);
+                            errorMap.put(y + 1, errorInfo);
                         }
                         }
-                        String primaryClazz = primaryCell.getClazz();
-                        if (SystemConstant.strNotNull(clazz)) {
-                            primaryClazz = primaryClazz + SystemConstant.COMMA + clazz;
-                            primaryCell.setClazz(primaryClazz);
-                        }
-                        duplicateData.add(basicCourseImportDto);
                     } else {
                     } else {
-                        courseDtoMap.put(courseCode, basicCourseImportDto);
+                        if (courseDtoMap.containsKey(courseCode)) {
+                            BasicCourseImportDto primaryCell = courseDtoMap.get(courseCode);
+                            String primaryName = primaryCell.getCourseName();
+                            String primaryTeachingRoomName = primaryCell.getTeachingRoomName();
+                            if (!Objects.equals(primaryName, courseName)) {
+                                String cellException = "【课程编号】 : " + courseCode + ",存在不同的【课程名称】";
+                                this.updateErrorInfoMap(errorMap, y + 1, cellException);
+                            }
+                            if (!Objects.equals(primaryTeachingRoomName, teachingRoomName)) {
+                                String cellException = "【课程编号】 : " + courseCode + ",存在不同的【所属教研室】";
+                                this.updateErrorInfoMap(errorMap, y + 1, cellException);
+                            }
+                            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.nonNull(courseCode) && !courseCode.matches(SystemConstant.REGULAR_EXPRESSION_OF_CODE)) {
                     if (Objects.nonNull(courseCode) && !courseCode.matches(SystemConstant.REGULAR_EXPRESSION_OF_CODE)) {
-                        excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程编号]不符合输入规范"));
-                    }
-                    if ((Objects.nonNull(name) && !Objects.equals(name.trim(), "")) && (Objects.isNull(code) || Objects.equals(code.trim(), ""))) {
-                        excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[工号]不能为空"));
-                    }
-                    if ((Objects.nonNull(code) && !Objects.equals(code.trim(), "")) && (Objects.isNull(name) || Objects.equals(name.trim(), ""))) {
-                        excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[姓名]不能为空"));
+                        this.updateErrorInfoMap(errorMap, y + 1, "[课程编号]不符合输入规范");
                     }
                     }
                 }
                 }
                 // 删除重复的(需要累加的)excel数据
                 // 删除重复的(需要累加的)excel数据
                 basicCourseImportDtoList.removeAll(duplicateData);
                 basicCourseImportDtoList.removeAll(duplicateData);
             }
             }
-            if (excelErrorTemp.size() > 0) {
-                throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(excelErrorTemp));
-            }
             return finalExcelList;
             return finalExcelList;
         },2);
         },2);
-        return this.executeBasicCourseImportLogic(finalList);
+        return this.executeBasicCourseImportLogic(finalList,errorMap);
+    }
+
+    private void updateErrorInfoMap(Map<Integer,List<String>> errorMap,Integer key,String exception) {
+        if (errorMap.containsKey(key)) {
+            errorMap.get(key).add(exception);
+        } else {
+            List<String> errorInfo = new ArrayList<>();
+            errorInfo.add(exception);
+            errorMap.put(key, errorInfo);
+        }
+    }
+
+    /**
+     * 解析异常信息
+     *
+     * @param exceptionMap 异常信息
+     */
+    private void analyzeException(Map<Integer, List<String>> exceptionMap) {
+        System.out.println(JSON.toJSONString(exceptionMap));
+        StringBuilder exception = new StringBuilder();
+        for (Integer rowIndex : exceptionMap.keySet()) {
+            String rowInfo;
+            if (rowIndex > 0) {
+                rowInfo = "excel中第【" + rowIndex + "】行 : ";
+            } else {
+                rowInfo = "excel中存在异常:";
+            }
+            List<String> exceptionList = exceptionMap.get(rowIndex);
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(exceptionList)) {
+                for (String e : exceptionList) {
+                    String cell = rowInfo + e + "\n";
+                    exception.append(cell);
+                }
+            }
+        }
+        System.out.println(exception);
+        if (exception.length() > 0) {
+            throw ExceptionResultEnum.ERROR.exception(exception.toString());
+        }
     }
     }
 
 
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @Override
     @Override
-    public List<BasicCourseParams> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList) {
+    public List<BasicCourseParams> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList,Map<Integer,List<String>> errorMap) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Long schoolId = sysUser.getSchoolId();
         Long schoolId = sysUser.getSchoolId();
         List<BasicCourseParams> addBasicCourseParamsList = new ArrayList<>();
         List<BasicCourseParams> addBasicCourseParamsList = new ArrayList<>();
         for (int i = 0; i < finalList.size(); i++) {
         for (int i = 0; i < finalList.size(); i++) {
             LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
             LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
             List<Object> basicCourseImportDtoList = excelMap.get(i);
             List<Object> basicCourseImportDtoList = excelMap.get(i);
-            assert basicCourseImportDtoList != null;
-            if (basicCourseImportDtoList.get(0) instanceof DescribeImportDto) {
-                continue;
-            }
             for (int y = 0; y < Objects.requireNonNull(basicCourseImportDtoList).size(); y++) {
             for (int y = 0; y < Objects.requireNonNull(basicCourseImportDtoList).size(); y++) {
                 BasicCourseImportDto basicCourseImportDto = (BasicCourseImportDto) basicCourseImportDtoList.get(y);
                 BasicCourseImportDto basicCourseImportDto = (BasicCourseImportDto) basicCourseImportDtoList.get(y);
                 String courseName = basicCourseImportDto.getCourseName();
                 String courseName = basicCourseImportDto.getCourseName();
                 String courseCode = basicCourseImportDto.getCourseCode();
                 String courseCode = basicCourseImportDto.getCourseCode();
                 String teachingRoomName = basicCourseImportDto.getTeachingRoomName();
                 String teachingRoomName = basicCourseImportDto.getTeachingRoomName();
                 String clazz = basicCourseImportDto.getClazz();
                 String clazz = basicCourseImportDto.getClazz();
+                // 原始excel中的行索引
+                Integer rowIndex = basicCourseImportDto.getRowIndex();
 
 
                 SysOrg sysOrg = sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda()
                 SysOrg sysOrg = sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda()
                         .eq(SysOrg::getSchoolId, schoolId)
                         .eq(SysOrg::getSchoolId, schoolId)
                         .eq(SysOrg::getEnable, true)
                         .eq(SysOrg::getEnable, true)
                         .eq(SysOrg::getName, teachingRoomName));
                         .eq(SysOrg::getName, teachingRoomName));
                 if (Objects.isNull(sysOrg)) {
                 if (Objects.isNull(sysOrg)) {
-                    throw ExceptionResultEnum.ERROR.exception("输入的开课学院【" + teachingRoomName + "】不存在");
+                    this.updateErrorInfoMap(errorMap,rowIndex,"输入的开课学院【" + teachingRoomName + "】不存在");
+                    continue;
                 }
                 }
                 Long teachingRoomId = sysOrg.getId();
                 Long teachingRoomId = sysOrg.getId();
                 LinkedHashSet<Long> clazzIdSet = new LinkedHashSet<>(), teachIdSet = new LinkedHashSet<>();
                 LinkedHashSet<Long> clazzIdSet = new LinkedHashSet<>(), teachIdSet = new LinkedHashSet<>();
@@ -345,7 +380,8 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                                 .eq(BasicClazz::getSchoolId, schoolId)
                                 .eq(BasicClazz::getSchoolId, schoolId)
                                 .eq(BasicClazz::getClazzName, clzName));
                                 .eq(BasicClazz::getClazzName, clzName));
                         if (Objects.isNull(basicClazz)) {
                         if (Objects.isNull(basicClazz)) {
-                            throw ExceptionResultEnum.ERROR.exception("所选择【班级】" + clzName + "不存在");
+                            this.updateErrorInfoMap(errorMap,rowIndex,"所选择【班级】" + clzName + "不存在");
+                            continue;
                         }
                         }
                         clazzIdSet.add(basicClazz.getId());
                         clazzIdSet.add(basicClazz.getId());
                     }
                     }
@@ -357,7 +393,8 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                         codeList = basicCourseImportDto.getCode().split(SystemConstant.COMMA);
                         codeList = basicCourseImportDto.getCode().split(SystemConstant.COMMA);
                     }
                     }
                     if (Objects.nonNull(codeList) && codeList.length != nameList.length) {
                     if (Objects.nonNull(codeList) && codeList.length != nameList.length) {
-                        throw ExceptionResultEnum.ERROR.exception("姓名和工号长度不匹配");
+                        this.updateErrorInfoMap(errorMap, rowIndex, "姓名和工号长度不匹配");
+                        continue;
                     }
                     }
                     for (int k = 0; k < nameList.length; k++) {
                     for (int k = 0; k < nameList.length; k++) {
                         String name = nameList[k].trim();
                         String name = nameList[k].trim();
@@ -367,12 +404,16 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                                 .eq(SysUser::getSchoolId, schoolId)
                                 .eq(SysUser::getSchoolId, schoolId)
                                 .eq(SysUser::getRealName, name)
                                 .eq(SysUser::getRealName, name)
                                 .eq(SysUser::getCode, code));
                                 .eq(SysUser::getCode, code));
-                        Optional.ofNullable(sysUserDb).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("【姓名】" + name + ",【工号】" + code + "不存在"));
+                        if (Objects.isNull(sysUserDb)) {
+                            this.updateErrorInfoMap(errorMap, rowIndex, "【姓名】" + name + ",【工号】" + code + "不存在");
+                            continue;
+                        }
 
 
                         List<SysRole> sysRoleList = sysUserRoleService.listRoleByUserId(sysUserDb.getId());
                         List<SysRole> sysRoleList = sysUserRoleService.listRoleByUserId(sysUserDb.getId());
                         sysRoleList = sysRoleList.stream().filter(s -> s.getType() == RoleTypeEnum.SCHOOL_TEACHER).collect(Collectors.toList());
                         sysRoleList = sysRoleList.stream().filter(s -> s.getType() == RoleTypeEnum.SCHOOL_TEACHER).collect(Collectors.toList());
                         if (CollectionUtils.isEmpty(sysRoleList)) {
                         if (CollectionUtils.isEmpty(sysRoleList)) {
-                            throw ExceptionResultEnum.ERROR.exception("【姓名】" + name + ",【工号】" + code + "没有老师角色");
+                            this.updateErrorInfoMap(errorMap, rowIndex, "【姓名】" + name + ",【工号】" + code + "没有老师角色");
+                            continue;
                         }
                         }
                         teachIdSet.add(sysUserDb.getId());
                         teachIdSet.add(sysUserDb.getId());
                     }
                     }
@@ -393,6 +434,9 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                 }
                 }
                 addBasicCourseParamsList.add(basicCourseParams);
                 addBasicCourseParamsList.add(basicCourseParams);
             }
             }
+            // 解析异常
+            this.analyzeException(errorMap);
+
             List<BasicCourse> editBasicCourse = this.editEntityHelp(addBasicCourseParamsList, sysUser);
             List<BasicCourse> editBasicCourse = this.editEntityHelp(addBasicCourseParamsList, sysUser);
             try {
             try {
                 this.saveOrUpdateBatch(editBasicCourse);
                 this.saveOrUpdateBatch(editBasicCourse);

+ 11 - 15
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicRoleDataPermissionServiceImpl.java

@@ -62,7 +62,7 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
             if (count > 0) {
             if (count > 0) {
                 throw ExceptionResultEnum.ERROR.exception("角色数据权限要绑在菜单级权限上");
                 throw ExceptionResultEnum.ERROR.exception("角色数据权限要绑在菜单级权限上");
             }
             }
-            QueryWrapper<BasicRoleDataPermission> basicRoleDataPermissionQueryWrapper = new QueryWrapper<BasicRoleDataPermission>();
+            QueryWrapper<BasicRoleDataPermission> basicRoleDataPermissionQueryWrapper = new QueryWrapper<>();
             if (Objects.nonNull(schoolId)) {
             if (Objects.nonNull(schoolId)) {
                 basicRoleDataPermissionQueryWrapper.lambda().eq(BasicRoleDataPermission::getSchoolId, schoolId);
                 basicRoleDataPermissionQueryWrapper.lambda().eq(BasicRoleDataPermission::getSchoolId, schoolId);
             }
             }
@@ -113,7 +113,7 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
             sysPrivilege = sysPrivilegeList.get(0);
             sysPrivilege = sysPrivilegeList.get(0);
         }
         }
 
 
-        return analysisDataPermission(sysPrivilege, requestUserId);
+        return analysisDataPermission(sysPrivilege, requestUserId, schoolId);
 
 
     }
     }
 
 
@@ -128,7 +128,7 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
     public DataPermissionRule findDataPermission(Long privilegeId) {
     public DataPermissionRule findDataPermission(Long privilegeId) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         SysPrivilege sysPrivilege = sysPrivilegeService.getById(privilegeId);
         SysPrivilege sysPrivilege = sysPrivilegeService.getById(privilegeId);
-        return this.analysisDataPermission(sysPrivilege, requestUser.getId());
+        return this.analysisDataPermission(sysPrivilege, requestUser.getId(), requestUser.getSchoolId());
     }
     }
 
 
     /**
     /**
@@ -136,9 +136,8 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
      *
      *
      * @param sysPrivilege  权限菜单对象
      * @param sysPrivilege  权限菜单对象
      * @param requestUserId 用户ID
      * @param requestUserId 用户ID
-     * @return
      */
      */
-    private DataPermissionRule analysisDataPermission(SysPrivilege sysPrivilege, Long requestUserId) {
+    private DataPermissionRule analysisDataPermission(SysPrivilege sysPrivilege, Long requestUserId, Long schoolId) {
         DataPermissionRule result = new DataPermissionRule();
         DataPermissionRule result = new DataPermissionRule();
         if (Objects.nonNull(sysPrivilege)) {
         if (Objects.nonNull(sysPrivilege)) {
             // 角色集合
             // 角色集合
@@ -146,7 +145,7 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
             // 数据库中存在该方法的url
             // 数据库中存在该方法的url
             int maxWeight = 0;
             int maxWeight = 0;
             for (Long roleId : roleIdList) {
             for (Long roleId : roleIdList) {
-                DataPermissionTypeEnum roleDataPermissionType = this.searchRoleDataPermissionByPrivilege(roleId, sysPrivilege);
+                DataPermissionTypeEnum roleDataPermissionType = this.searchRoleDataPermissionByPrivilege(roleId, sysPrivilege, schoolId);
                 if (Objects.nonNull(roleDataPermissionType)) {
                 if (Objects.nonNull(roleDataPermissionType)) {
                     // 角色数据权限不为空时,筛选出所有角色在该url中的最大范围数据权限为该url的最终数据权限
                     // 角色数据权限不为空时,筛选出所有角色在该url中的最大范围数据权限为该url的最终数据权限
                     int weight = roleDataPermissionType.getWeight();
                     int weight = roleDataPermissionType.getWeight();
@@ -175,8 +174,6 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
                         // 只能看自己所在机构和所辖机构
                         // 只能看自己所在机构和所辖机构
                         result.setOrgIdSet(sysOrgService.findDeepOrgIdListByUserId(requestUser.getId()));
                         result.setOrgIdSet(sysOrgService.findDeepOrgIdListByUserId(requestUser.getId()));
                         break;
                         break;
-                    case ALL:
-                        break;
                     default:
                     default:
                         break;
                         break;
                 }
                 }
@@ -185,8 +182,6 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
         return result;
         return result;
     }
     }
 
 
-    ;
-
     /**
     /**
      * 递归搜索角色的数据权限
      * 递归搜索角色的数据权限
      *
      *
@@ -194,12 +189,13 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
      * @param privilege url权限
      * @param privilege url权限
      * @return 角色数据权限规则
      * @return 角色数据权限规则
      */
      */
-    private DataPermissionTypeEnum searchRoleDataPermissionByPrivilege(Long roleId, SysPrivilege privilege) {
+    private DataPermissionTypeEnum searchRoleDataPermissionByPrivilege(Long roleId, SysPrivilege privilege, Long schoolId) {
         Long privilegeId = privilege.getId();
         Long privilegeId = privilege.getId();
         PrivilegeEnum type = privilege.getType();
         PrivilegeEnum type = privilege.getType();
         // 如果是菜单,搜索该菜单是否绑定了数据权限
         // 如果是菜单,搜索该菜单是否绑定了数据权限
         if (PrivilegeEnum.MENU.equals(type)) {
         if (PrivilegeEnum.MENU.equals(type)) {
             BasicRoleDataPermission basicRoleDataPermission = this.getOne(new QueryWrapper<BasicRoleDataPermission>().lambda()
             BasicRoleDataPermission basicRoleDataPermission = this.getOne(new QueryWrapper<BasicRoleDataPermission>().lambda()
+                    .eq(BasicRoleDataPermission::getSchoolId, schoolId)
                     .eq(BasicRoleDataPermission::getRoleId, roleId)
                     .eq(BasicRoleDataPermission::getRoleId, roleId)
                     .eq(BasicRoleDataPermission::getPrivilegeId, privilegeId));
                     .eq(BasicRoleDataPermission::getPrivilegeId, privilegeId));
             if (Objects.nonNull(basicRoleDataPermission)) {
             if (Objects.nonNull(basicRoleDataPermission)) {
@@ -207,11 +203,11 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
                 return basicRoleDataPermission.getDataPermissionType();
                 return basicRoleDataPermission.getDataPermissionType();
             } else {
             } else {
                 // 没数据权限查父菜单
                 // 没数据权限查父菜单
-                return getDataPermissionRule(roleId, privilege);
+                return getDataPermissionRule(roleId, privilege, schoolId);
             }
             }
         } else {
         } else {
             // 如果该url不是菜单类型则查询其父目录
             // 如果该url不是菜单类型则查询其父目录
-            return getDataPermissionRule(roleId, privilege);
+            return getDataPermissionRule(roleId, privilege, schoolId);
         }
         }
     }
     }
 
 
@@ -222,12 +218,12 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
      * @param privilege 权限
      * @param privilege 权限
      * @return 数据权限规则
      * @return 数据权限规则
      */
      */
-    private DataPermissionTypeEnum getDataPermissionRule(Long roleId, SysPrivilege privilege) {
+    private DataPermissionTypeEnum getDataPermissionRule(Long roleId, SysPrivilege privilege, Long schoolId) {
         Long parentId = privilege.getParentId();
         Long parentId = privilege.getParentId();
         if (SystemConstant.longNotNull(parentId)) {
         if (SystemConstant.longNotNull(parentId)) {
             SysPrivilege parent = sysPrivilegeService.getById(parentId);
             SysPrivilege parent = sysPrivilegeService.getById(parentId);
             if (Objects.nonNull(parent)) {
             if (Objects.nonNull(parent)) {
-                return this.searchRoleDataPermissionByPrivilege(roleId, parent);
+                return this.searchRoleDataPermissionByPrivilege(roleId, parent, schoolId);
             } else {
             } else {
                 return null;
                 return null;
             }
             }

+ 1 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java

@@ -288,8 +288,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
         for (int i = 0; i < finalList.size(); i++) {
         for (int i = 0; i < finalList.size(); i++) {
             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);
-
-            if (basicStudentImportDtoList.isEmpty() || basicStudentImportDtoList.get(0) instanceof DescribeImportDto) {
+            if (CollectionUtils.isEmpty(basicStudentImportDtoList)){
                 continue;
                 continue;
             }
             }
             List<BasicStudentImportDto> datasource = basicStudentImportDtoList.stream().map(e -> {
             List<BasicStudentImportDto> datasource = basicStudentImportDtoList.stream().map(e -> {

+ 1 - 5
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -546,12 +546,8 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
             for (int i = 0; i < finalList.size(); i++) {
             for (int i = 0; i < finalList.size(); i++) {
                 LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
                 LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
                 List<Object> sysOrgImportDtoList = excelMap.get(i);
                 List<Object> sysOrgImportDtoList = excelMap.get(i);
-                assert sysOrgImportDtoList != null;
-                if (sysOrgImportDtoList.get(0) instanceof DescribeImportDto) {
-                    continue;
-                }
                 //  处理机构
                 //  处理机构
-                if (sysOrgImportDtoList.get(0) instanceof SysOrgImportDto) {
+                if (CollectionUtils.isNotEmpty(sysOrgImportDtoList) && sysOrgImportDtoList.get(0) instanceof SysOrgImportDto) {
                     List<SysOrgImportDto> datasource = sysOrgImportDtoList.stream().map(e -> {
                     List<SysOrgImportDto> datasource = sysOrgImportDtoList.stream().map(e -> {
                         SysOrgImportDto sysOrgImportDto = new SysOrgImportDto();
                         SysOrgImportDto sysOrgImportDto = new SysOrgImportDto();
                         BeanUtils.copyProperties(e, sysOrgImportDto);
                         BeanUtils.copyProperties(e, sysOrgImportDto);

+ 55 - 42
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.common.service.impl;
 package com.qmth.teachcloud.common.service.impl;
 
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -11,6 +12,7 @@ import com.qmth.teachcloud.common.bean.auth.AuthBean;
 import com.qmth.teachcloud.common.bean.dto.*;
 import com.qmth.teachcloud.common.bean.dto.*;
 import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
 import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
 import com.qmth.teachcloud.common.bean.dto.excel.SysUserImportDto;
 import com.qmth.teachcloud.common.bean.dto.excel.SysUserImportDto;
+import com.qmth.teachcloud.common.bean.dto.excel.export.SysUserErrorExportDto;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
 import com.qmth.teachcloud.common.bean.params.UserSaveReportParams;
 import com.qmth.teachcloud.common.bean.params.UserSaveReportParams;
@@ -750,17 +752,20 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Transactional
     @Transactional
     @Override
     @Override
     public Map<String, Object> executeSysUserImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) {
     public Map<String, Object> executeSysUserImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) {
+        List<SysUserErrorExportDto> errorDataList = JSON.parseArray(JSON.toJSONString(map.get(SystemConstant.ERROR_DATA_LIST)), SysUserErrorExportDto.class);
+        if (Objects.isNull(errorDataList)) {
+            errorDataList = new ArrayList<>();
+            map.put(SystemConstant.ERROR_DATA_LIST,errorDataList);
+        }
+
         SysUser requestUser = (SysUser) map.get(SystemConstant.SYS_USER);
         SysUser requestUser = (SysUser) map.get(SystemConstant.SYS_USER);
         Long schoolId = requestUser.getSchoolId();
         Long schoolId = requestUser.getSchoolId();
         List<Long> userIdList = new ArrayList<>();
         List<Long> userIdList = new ArrayList<>();
         for (int i = 0; i < finalList.size(); i++) {
         for (int i = 0; i < finalList.size(); i++) {
             LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
             LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
             List<Object> sysUserImportDtoList = excelMap.get(i);
             List<Object> sysUserImportDtoList = excelMap.get(i);
-            if (CollectionUtils.isEmpty(sysUserImportDtoList)){
-                continue;
-            }
             //  处理机构
             //  处理机构
-            if (sysUserImportDtoList.get(0) instanceof SysUserImportDto) {
+            if (CollectionUtils.isNotEmpty(sysUserImportDtoList) && sysUserImportDtoList.get(0) instanceof SysUserImportDto) {
                 List<SysUserImportDto> datasource = sysUserImportDtoList.stream().map(e -> {
                 List<SysUserImportDto> datasource = sysUserImportDtoList.stream().map(e -> {
                     SysUserImportDto sysUserImportDto = new SysUserImportDto();
                     SysUserImportDto sysUserImportDto = new SysUserImportDto();
                     BeanUtils.copyProperties(e, sysUserImportDto);
                     BeanUtils.copyProperties(e, sysUserImportDto);
@@ -771,45 +776,53 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 // 提前创建或获取机构信息并存入map
                 // 提前创建或获取机构信息并存入map
                 Map<String, Long> orgInfoMap = sysOrgService.createOrGetOrgByOrgInfo(orgInfoList, requestUser);
                 Map<String, Long> orgInfoMap = sysOrgService.createOrGetOrgByOrgInfo(orgInfoList, requestUser);
                 for (SysUserImportDto sysUserImportDto : datasource) {
                 for (SysUserImportDto sysUserImportDto : datasource) {
-                    String name = sysUserImportDto.getName();
-                    String code = sysUserImportDto.getCode();
-                    String phoneNumber = sysUserImportDto.getPhoneNumber();
-                    String orgName = sysUserImportDto.getOrgName();
-                    if (!orgInfoMap.containsKey(orgName)) {
-                        throw ExceptionResultEnum.ERROR.exception("在解析的机构map集合中,没有找到excel数据中的用户机构名称【" + orgName + "】");
-                    }
-                    // 直接解析机构id
-                    Long orgId = orgInfoMap.get(orgName);
-                    String roleName = sysUserImportDto.getRoleName();
-
-                    UserSaveParams userSaveParams = new UserSaveParams();
-
-                    LinkedHashSet<Long> roleIdList = this.analyzeRoleName(schoolId, roleName);
-
-                    SysUser oldUser = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getCode, code).eq(SysUser::getSchoolId, schoolId));
-                    Long oldUserId = null;
-                    Set<Long> oldRoleIdSet = new HashSet<>();
-                    if (Objects.nonNull(oldUser)) {
-                        oldUserId = oldUser.getId();
-                        oldRoleIdSet = new HashSet<>(sysRoleService.getUserRoles(oldUserId));
-                    }
-                    String loginName = code;
-                    if (SystemConstant.longNotNull(oldUserId)) {
-                        // 编辑
-                        userSaveParams.setId(oldUserId);
-                        loginName = oldUser.getLoginName();
-                    }
-                    userSaveParams.setOrgId(orgId);
-                    userSaveParams.setRealName(name);
-                    userSaveParams.setLoginName(loginName);
-                    userSaveParams.setRoleIds(roleIdList.toArray(new Long[0]));
-                    if (SystemConstant.strNotNull(phoneNumber)) {
-                        userSaveParams.setMobileNumber(phoneNumber);
+                    try {
+                        String name = sysUserImportDto.getName();
+                        String code = sysUserImportDto.getCode();
+                        String phoneNumber = sysUserImportDto.getPhoneNumber();
+                        String orgName = sysUserImportDto.getOrgName();
+                        if (!orgInfoMap.containsKey(orgName)) {
+                            // 系统异常
+                            throw ExceptionResultEnum.ERROR.exception("在解析的机构map集合中,没有找到excel数据中的用户机构名称【" + orgName + "】");
+                        }
+                        // 直接解析机构id
+                        Long orgId = orgInfoMap.get(orgName);
+                        String roleName = sysUserImportDto.getRoleName();
+
+                        UserSaveParams userSaveParams = new UserSaveParams();
+
+                        LinkedHashSet<Long> roleIdList = this.analyzeRoleName(schoolId, roleName);
+
+                        SysUser oldUser = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getCode, code).eq(SysUser::getSchoolId, schoolId));
+                        Long oldUserId = null;
+                        if (Objects.nonNull(oldUser)) {
+                            oldUserId = oldUser.getId();
+                        }
+                        String loginName = code;
+                        if (SystemConstant.longNotNull(oldUserId)) {
+                            // 编辑
+                            userSaveParams.setId(oldUserId);
+                            loginName = oldUser.getLoginName();
+                        }
+                        userSaveParams.setOrgId(orgId);
+                        userSaveParams.setRealName(name);
+                        userSaveParams.setLoginName(loginName);
+                        userSaveParams.setRoleIds(roleIdList.toArray(new Long[0]));
+                        if (SystemConstant.strNotNull(phoneNumber)) {
+                            userSaveParams.setMobileNumber(phoneNumber);
+                        }
+                        userSaveParams.setCode(code);
+                        userSaveParams.setSchoolId(schoolId);
+
+                        Long upUserId = this.saveUserCommon(userSaveParams, requestUser.getId());
+                        userIdList.add(upUserId);
+                    } catch (Exception e) {
+                        String error = e.getMessage();
+                        SysUserErrorExportDto sysUserErrorExportDto = new SysUserErrorExportDto();
+                        BeanUtils.copyProperties(sysUserImportDto, sysUserErrorExportDto);
+                        sysUserErrorExportDto.setErrorMsg(error);
+                        errorDataList.add(sysUserErrorExportDto);
                     }
                     }
-                    userSaveParams.setCode(code);
-                    userSaveParams.setSchoolId(schoolId);
-                    Long upUserId = this.saveUserCommon(userSaveParams, requestUser.getId());
-                    userIdList.add(upUserId);
                 }
                 }
             }
             }
         }
         }