Explorar o código

基础学生导入

caozixuan hai 1 ano
pai
achega
67c99b8ff1

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

@@ -1922,7 +1922,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             basicStudentExtrasParam.setClazzName(e.getClazzName());
             return Stream.of(basicStudentExtrasParam);
         }).collect(Collectors.toList());
-        basicStudentService.saveBasicStudentWithExtrasList(basicStudentExtrasParamList, requestUser, false);
+        basicStudentService.saveBasicStudentWithExtrasList(basicStudentExtrasParamList, requestUser, false,null);
 
 
         // 考生信息回溯

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

@@ -16,6 +16,7 @@ import com.qmth.teachcloud.common.util.ResultUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.io.InputStream;
 import java.text.MessageFormat;
@@ -55,7 +56,9 @@ public class AsyncStudentDataImportService extends AsyncImportTaskTemplete {
             //错误数据,生成文件
             if (result.containsKey(SystemConstant.ERROR_DATA_LIST)) {
                 List<BasicStudentErrorExportDto> errorDataList = (List<BasicStudentErrorExportDto>) result.get(SystemConstant.ERROR_DATA_LIST);
-                super.createErrorFile(tbTask, BasicStudentErrorExportDto.class, errorDataList);
+                if (!CollectionUtils.isEmpty(errorDataList)){
+                    super.createErrorFile(tbTask, BasicStudentErrorExportDto.class, errorDataList);
+                }
             }
 
             stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}{4}{5}{6}{7}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), FINISH_TITLE, Long.valueOf(String.valueOf(result.get(SystemConstant.DATA_COUNT))), FINISH_TOTAL_SIZE, Long.valueOf(String.valueOf(result.get(SystemConstant.SUCCESS_DATA_COUNT))), FINISH_SUCCESS_SIZE, Long.valueOf(String.valueOf(result.get(SystemConstant.ERROR_DATA_COUNT))), FINISH_ERROR_SIZE));

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

@@ -1366,15 +1366,15 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(BasicStudentImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
             Map<String, String> checkCodeMap = new HashMap<>();
             for (int i = 0; i < finalExcelList.size(); i++) {
-                List<Integer> errorIndex = new ArrayList<>();
                 LinkedMultiValueMap<Integer, Object> excelMap = finalExcelList.get(i);
                 List<Object> basicStudentImportDtoList = excelMap.get(i);
-                assert basicStudentImportDtoList != null;
-                if (basicStudentImportDtoList.get(0) instanceof DescribeImportDto) {
-                    continue;
-                }
+                // 将要删除的异常数据
+                List<BasicStudentImportDto> willRemoveList = new ArrayList<>();
                 for (int y = 0; y < Objects.requireNonNull(basicStudentImportDtoList).size(); y++) {
+                    // 行索引
+                    Integer rowIndex = y + 1;
                     BasicStudentImportDto basicStudentImportDto = (BasicStudentImportDto) basicStudentImportDtoList.get(y);
+                    basicStudentImportDto.setRowIndex(rowIndex);
                     totalInteger.getAndIncrement();
 
                     BasicStudentErrorExportDto basicStudentErrorExportDto = new BasicStudentErrorExportDto();
@@ -1408,15 +1408,13 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     if (errorString.length() > 0) {
                         basicStudentErrorExportDto.setErrorMsg(errorString);
                         errorDataList.add(basicStudentErrorExportDto);
-                        errorIndex.add(y);
+                        willRemoveList.add(basicStudentImportDto);
                     } else {
                         // 校验通过的数据
                         successInteger.getAndIncrement();
                     }
                 }
-                for (int index : errorIndex) {
-                    basicStudentImportDtoList.remove(index);
-                }
+                basicStudentImportDtoList.removeAll(willRemoveList);
             }
             if (!errorDataList.isEmpty()) {
                 map.put(SystemConstant.ERROR_DATA_LIST, errorDataList);

+ 0 - 5
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicClazzController.java

@@ -8,8 +8,6 @@ import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.bean.params.BasicClazzParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.entity.TBTask;
-import com.qmth.teachcloud.common.enums.TaskTypeEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.service.BasicClazzService;
 import com.qmth.teachcloud.common.util.Result;
@@ -19,15 +17,12 @@ import io.swagger.annotations.*;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.util.List;
-import java.util.Map;
-import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**

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

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.common.bean.dto.excel;
 
 import com.qmth.teachcloud.common.annotation.ExcelImportTempleteVaild;
 import com.qmth.teachcloud.common.annotation.ExcelNote;
+import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
@@ -33,6 +34,9 @@ public class BasicStudentImportDto implements Serializable {
     @NotNull
     private String clazzName;
 
+    @ApiModelProperty("行索引")
+    private Integer rowIndex;
+
     public String getStudentName() {
         return studentName;
     }
@@ -72,4 +76,12 @@ public class BasicStudentImportDto implements Serializable {
     public void setClazzName(String clazzName) {
         this.clazzName = clazzName;
     }
+
+    public Integer getRowIndex() {
+        return rowIndex;
+    }
+
+    public void setRowIndex(Integer rowIndex) {
+        this.rowIndex = rowIndex;
+    }
 }

+ 16 - 15
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/excel/export/BasicStudentErrorExportDto.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.common.bean.dto.excel.export;
 
 import com.qmth.teachcloud.common.annotation.ExcelImportTempleteVaild;
 import com.qmth.teachcloud.common.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
 
@@ -16,21 +17,21 @@ public class BasicStudentErrorExportDto implements Serializable {
     @ExcelProperty(name = "学号", index = 2)
     private String studentCode;
 
-    @ExcelProperty(name = "手机号", index = 3)
-    private String phoneNumber;
-
-    @ExcelProperty(name = "学院", index = 4)
+    @ExcelProperty(name = "学院", index = 3)
     private String collegeName;
 
-    @ExcelProperty(name = "专业", index = 5)
+    @ExcelProperty(name = "专业", index = 4)
     private String majorName;
 
-    @ExcelProperty(name = "班级", index = 6)
+    @ExcelProperty(name = "班级", index = 5)
     private String clazzName;
 
-    @ExcelProperty(name = "错误原因", index = 7)
+    @ExcelProperty(name = "错误原因", index = 6)
     private String errorMsg;
 
+    @ApiModelProperty("行索引")
+    private Integer rowIndex;
+
     public String getStudentName() {
         return studentName;
     }
@@ -47,14 +48,6 @@ public class BasicStudentErrorExportDto implements Serializable {
         this.studentCode = studentCode;
     }
 
-    public String getPhoneNumber() {
-        return phoneNumber;
-    }
-
-    public void setPhoneNumber(String phoneNumber) {
-        this.phoneNumber = phoneNumber;
-    }
-
     public String getCollegeName() {
         return collegeName;
     }
@@ -86,4 +79,12 @@ public class BasicStudentErrorExportDto implements Serializable {
     public void setErrorMsg(String errorMsg) {
         this.errorMsg = errorMsg;
     }
+
+    public Integer getRowIndex() {
+        return rowIndex;
+    }
+
+    public void setRowIndex(Integer rowIndex) {
+        this.rowIndex = rowIndex;
+    }
 }

+ 11 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/BasicStudentExtrasParam.java

@@ -29,6 +29,9 @@ public class BasicStudentExtrasParam implements Serializable {
     @ApiModelProperty(value = "班级")
     private String clazzName;
 
+    @ApiModelProperty(value = "行索引")
+    private Integer rowIndex;
+
     public String getStudentName() {
         return studentName;
     }
@@ -76,4 +79,12 @@ public class BasicStudentExtrasParam implements Serializable {
     public void setClazzName(String clazzName) {
         this.clazzName = clazzName;
     }
+
+    public Integer getRowIndex() {
+        return rowIndex;
+    }
+
+    public void setRowIndex(Integer rowIndex) {
+        this.rowIndex = rowIndex;
+    }
 }

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

@@ -78,7 +78,7 @@ public interface BasicStudentService extends IService<BasicStudent> {
      * @param requestUser                 请求人
      * @param saveBasicStudent            是否保存基础学生数据
      */
-    void saveBasicStudentWithExtrasList(List<BasicStudentExtrasParam> basicStudentExtrasParamList, SysUser requestUser, boolean saveBasicStudent) throws IllegalAccessException;
+    void saveBasicStudentWithExtrasList(List<BasicStudentExtrasParam> basicStudentExtrasParamList, SysUser requestUser, boolean saveBasicStudent, Map<String, Object> map) throws IllegalAccessException;
 
     /**
      * 批量删除学生基本信息(逻辑)

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

@@ -22,6 +22,7 @@ import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.LinkedMultiValueMap;
@@ -60,7 +61,7 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
         return basicClazzMapper.findBasicClazzPage(new Page<>(pageNumber, pageSize), queryParams, schoolId, dpr);
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @Transactional(propagation= Propagation.NESTED)
     @Override
     public Long saveBasicClazz(BasicClazzParams basicClazzParams, SysUser sysUser) throws IllegalAccessException {
         List<BasicClazzParams> basicClazzParamsList = new ArrayList<>();

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

@@ -22,6 +22,7 @@ import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.BasicStudentService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
@@ -55,7 +56,7 @@ public class BasicMajorServiceImpl extends ServiceImpl<BasicMajorMapper, BasicMa
         return this.baseMapper.findBasicMajorPage(new Page<>(pageNumber, pageSize), schoolId, majorName, dpr);
     }
 
-    @Transactional
+    @Transactional(propagation = Propagation.NESTED)
     @Override
     public Long saveBasicMajor(BasicMajorParams basicMajorParams, SysUser requestUser) throws IllegalAccessException {
         SystemConstant.verifyDBFields(basicMajorParams, basicMajorParams.getClass());

+ 122 - 67
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.common.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -11,14 +12,16 @@ import com.qmth.teachcloud.common.bean.dto.BasicStudentExportDto;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.dto.TaskPrintClassDto;
 import com.qmth.teachcloud.common.bean.dto.excel.BasicStudentImportDto;
-import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
-import com.qmth.teachcloud.common.bean.params.*;
+import com.qmth.teachcloud.common.bean.dto.excel.export.BasicStudentErrorExportDto;
+import com.qmth.teachcloud.common.bean.params.BasicClazzParams;
+import com.qmth.teachcloud.common.bean.params.BasicMajorParams;
+import com.qmth.teachcloud.common.bean.params.BasicStudentExtrasParam;
+import com.qmth.teachcloud.common.bean.params.BasicStudentParams;
 import com.qmth.teachcloud.common.bean.result.BasicStudentResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.TeachBasicEnum;
-import com.qmth.teachcloud.common.enums.paperGroup.MarkModeEnum;
 import com.qmth.teachcloud.common.mapper.BasicStudentMapper;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ExcelUtil;
@@ -31,7 +34,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.LinkedMultiValueMap;
-import sun.swing.StringUIClientPropertyKey;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -55,8 +57,6 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
     private BasicClazzService basicClazzService;
     @Resource
     private BasicMajorService basicMajorService;
-    @Resource
-    private BasicCollegeService basicCollegeService;
 
     @Resource
     private SysOrgService sysOrgService;
@@ -115,20 +115,31 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void saveBasicStudentWithExtrasList(List<BasicStudentExtrasParam> basicStudentExtrasParamList, SysUser requestUser, boolean saveBasicStudent) throws IllegalAccessException {
+    public void saveBasicStudentWithExtrasList(List<BasicStudentExtrasParam> basicStudentExtrasParamList, SysUser requestUser, boolean saveBasicStudent, Map<String, Object> map) {
         Long schoolId = requestUser.getSchoolId();
+        List<BasicStudentErrorExportDto> errorDataList = new ArrayList<>();
+        boolean throwException = true;
+        if (Objects.nonNull(map)) {
+            Object obj = map.get(SystemConstant.ERROR_DATA_LIST);
+            errorDataList = JSON.parseArray(JSON.toJSONString(obj), BasicStudentErrorExportDto.class);
+            if (Objects.isNull(errorDataList)) {
+                errorDataList = new ArrayList<>();
+            }
+            map.put(SystemConstant.ERROR_DATA_LIST, errorDataList);
+            throwException = false;
+        }
 
         // 查询所有学院map
         List<SysOrg> sysOrgList = sysOrgService.findCollegeLevelOrgList(schoolId);
         Map<String, Long> collegeMap = CollectionUtils.isEmpty(sysOrgList) ? new HashMap<>() : sysOrgList.stream().collect(Collectors.toMap(SysOrg::getName, SysOrg::getId));
         // 查询所有专业map
         List<BasicMajor> basicMajorList = basicMajorService.list(new QueryWrapper<BasicMajor>().lambda().eq(BasicMajor::getSchoolId, schoolId));
-        Map<String, Long> majorMap = CollectionUtils.isEmpty(basicMajorList) ? new HashMap<>() : basicMajorList.stream().collect(Collectors.toMap(k -> k.getOrgId() + SystemConstant.HYPHEN + k.getName(), v -> v.getId()));
+        Map<String, Long> majorMap = CollectionUtils.isEmpty(basicMajorList) ? new HashMap<>() : basicMajorList.stream().collect(Collectors.toMap(k -> k.getBelongOrgId() + SystemConstant.HYPHEN + k.getName(), BaseEntity::getId));
         // 查询所有班级map
         List<BasicClazz> basicClazzList = basicClazzService.list(new QueryWrapper<BasicClazz>().lambda().eq(BasicClazz::getSchoolId, schoolId));
-        Map<String, Long> clazzMap = CollectionUtils.isEmpty(basicClazzList) ? new HashMap<>() : basicClazzList.stream().collect(Collectors.toMap(k -> k.getMajorId() + SystemConstant.HYPHEN + k.getClazzName(), v -> v.getId()));
+        Map<String, Long> clazzMap = CollectionUtils.isEmpty(basicClazzList) ? new HashMap<>() : basicClazzList.stream().collect(Collectors.toMap(k -> k.getMajorId() + SystemConstant.HYPHEN + k.getClazzName(), BaseEntity::getId));
 
-        List<BasicStudentParams> addBasicStudentParamsList = new ArrayList<>();
+        List<BasicStudent> editEntityList = new ArrayList<>();
         for (BasicStudentExtrasParam basicStudentExtrasParam : basicStudentExtrasParamList) {
             // 取值
             String studentName = basicStudentExtrasParam.getStudentName();
@@ -138,57 +149,91 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
             String majorName = basicStudentExtrasParam.getMajorName();
             String clazzName = basicStudentExtrasParam.getClazzName();
 
+            BasicStudentErrorExportDto basicStudentErrorExportDto = new BasicStudentErrorExportDto();
+            BeanUtils.copyProperties(basicStudentExtrasParam, basicStudentErrorExportDto);
             // 学院
             if (StringUtils.isBlank(collegeName)) {
-                throw ExceptionResultEnum.ERROR.exception("学号[" + studentCode + "]的数据,学院必填");
+                basicStudentErrorExportDto.setErrorMsg("学号[" + studentCode + "]的数据,学院必填");
+                errorDataList.add(basicStudentErrorExportDto);
+                continue;
             }
             if (!collegeMap.containsKey(collegeName)) {
-                SysOrg sysOrg = new SysOrg();
-                sysOrg.setSchoolId(schoolId);
-                sysOrg.setName(collegeName);
-                sysOrg.setParentId(sysOrgService.findRootOrg(schoolId).getId());
-                sysOrgService.saveOrg(sysOrg, requestUser);
-                collegeMap.put(collegeName, sysOrg.getId());
+                try {
+                    SysOrg sysOrg = new SysOrg();
+                    sysOrg.setSchoolId(schoolId);
+                    sysOrg.setName(collegeName);
+                    sysOrg.setParentId(sysOrgService.findRootOrg(schoolId).getId());
+                    sysOrgService.saveOrg(sysOrg, requestUser);
+                    collegeMap.put(collegeName, sysOrg.getId());
+                } catch (Exception e) {
+                    basicStudentErrorExportDto.setErrorMsg(e.getMessage());
+                    errorDataList.add(basicStudentErrorExportDto);
+                    continue;
+                }
             }
             Long collegeId = collegeMap.get(collegeName);
             if (collegeId == null) {
-                throw ExceptionResultEnum.ERROR.exception("学号[" + studentCode + "]的数据,学院查询失败");
+                basicStudentErrorExportDto.setErrorMsg("学号[" + studentCode + "]的数据,学院查询失败");
+                errorDataList.add(basicStudentErrorExportDto);
+                continue;
             }
 
             // 专业
             if (StringUtils.isBlank(majorName)) {
-                throw ExceptionResultEnum.ERROR.exception("学号[" + studentCode + "]的数据,专业必填");
+                basicStudentErrorExportDto.setErrorMsg("学号[" + studentCode + "]的数据,专业必填");
+                errorDataList.add(basicStudentErrorExportDto);
+                continue;
             }
             String majorKey = collegeId + SystemConstant.HYPHEN + majorName;
             if (!majorMap.containsKey(majorKey)) {
                 // 新增一个major
-                BasicMajorParams basicMajorParams = new BasicMajorParams();
-                basicMajorParams.setMajorName(majorName);
-                basicMajorParams.setCollegeId(collegeId);
-                Long majorId = basicMajorService.saveBasicMajor(basicMajorParams, requestUser);
-                majorMap.put(majorKey, majorId);
+                try {
+                    BasicMajorParams basicMajorParams = new BasicMajorParams();
+                    basicMajorParams.setMajorName(majorName);
+                    basicMajorParams.setCollegeId(collegeId);
+                    Long majorId = basicMajorService.saveBasicMajor(basicMajorParams, requestUser);
+                    majorMap.put(majorKey, majorId);
+                } catch (Exception e) {
+                    basicStudentErrorExportDto.setErrorMsg(e.getMessage());
+                    errorDataList.add(basicStudentErrorExportDto);
+                    continue;
+                }
+
             }
             Long majorId = majorMap.get(majorKey);
             if (majorId == null) {
-                throw ExceptionResultEnum.ERROR.exception("学号[" + studentCode + "]的数据,专业查询失败");
+                basicStudentErrorExportDto.setErrorMsg("学号[" + studentCode + "]的数据,专业查询失败");
+                errorDataList.add(basicStudentErrorExportDto);
+                continue;
             }
 
             // 班级
             if (StringUtils.isBlank(clazzName)) {
-                throw ExceptionResultEnum.ERROR.exception("学号[" + studentCode + "]的数据,班级必填");
+                basicStudentErrorExportDto.setErrorMsg("学号[" + studentCode + "]的数据,班级必填");
+                errorDataList.add(basicStudentErrorExportDto);
+                continue;
             }
             String clazzKey = majorId + SystemConstant.HYPHEN + clazzName;
             if (!clazzMap.containsKey(clazzKey)) {
                 // 新增一个clazz
-                BasicClazzParams basicClazzParams = new BasicClazzParams();
-                basicClazzParams.setMajorId(majorId);
-                basicClazzParams.setClazzName(clazzName);
-                Long clazzId = basicClazzService.saveBasicClazz(basicClazzParams, requestUser);
-                clazzMap.put(clazzKey, clazzId);
+                try {
+                    BasicClazzParams basicClazzParams = new BasicClazzParams();
+                    basicClazzParams.setMajorId(majorId);
+                    basicClazzParams.setClazzName(clazzName);
+                    Long clazzId = basicClazzService.saveBasicClazz(basicClazzParams, requestUser);
+                    clazzMap.put(clazzKey, clazzId);
+                } catch (Exception e) {
+                    basicStudentErrorExportDto.setErrorMsg(e.getMessage());
+                    errorDataList.add(basicStudentErrorExportDto);
+                    continue;
+                }
+
             }
             Long clazzId = clazzMap.get(clazzKey);
-            if (majorId == null) {
-                throw ExceptionResultEnum.ERROR.exception("学号[" + studentCode + "]的数据,班级查询失败");
+            if (clazzId == null) {
+                basicStudentErrorExportDto.setErrorMsg("学号[" + studentCode + "]的数据,班级查询失败");
+                errorDataList.add(basicStudentErrorExportDto);
+                continue;
             }
 
             if (saveBasicStudent) {
@@ -200,41 +245,50 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
                 basicStudentParams.setCollegeId(collegeId);
                 basicStudentParams.setMajorId(majorId);
                 basicStudentParams.setClazzId(clazzId);
-                addBasicStudentParamsList.add(basicStudentParams);
+                try {
+                    BasicStudent basicStudent = this.editEntityHelp(basicStudentParams, requestUser);
+                    editEntityList.add(basicStudent);
+                } catch (Exception e) {
+                    basicStudentErrorExportDto.setErrorMsg(e.getMessage());
+                    errorDataList.add(basicStudentErrorExportDto);
+                }
             }
         }
-        if (!CollectionUtils.isEmpty(addBasicStudentParamsList)) {
-            List<BasicStudent> editEntityList = new ArrayList<>();
-            for (BasicStudentParams basicStudentParams : addBasicStudentParamsList) {
-                BasicStudent basicStudent = this.editEntityHelp(basicStudentParams, requestUser);
-                editEntityList.add(basicStudent);
+        // 抛出或者记录异常
+        if (!CollectionUtils.isEmpty(errorDataList)) {
+            if (throwException) {
+                String errorMsg = errorDataList.stream().map(BasicStudentErrorExportDto::getErrorMsg).collect(Collectors.joining("\n"));
+                throw ExceptionResultEnum.ERROR.exception(errorMsg);
+            } else {
+                map.put(SystemConstant.ERROR_DATA_COUNT, Integer.parseInt(String.valueOf(map.get(SystemConstant.ERROR_DATA_COUNT))) + errorDataList.size());
             }
-            try {
-                this.saveOrUpdateBatch(editEntityList);
-            } catch (Exception e) {
-                if (e instanceof DataIntegrityViolationException) {
-                    String error = e.getCause().toString();
-                    String tooLongColumn = error.substring(error.lastIndexOf("column") + 7);
-                    tooLongColumn = tooLongColumn.substring(0, tooLongColumn.lastIndexOf("at") - 1);
-                    tooLongColumn = tooLongColumn.replaceAll("'", "");
-                    String columnName = "";
-                    switch (tooLongColumn) {
-                        case "student_name":
-                            columnName = "基础学生姓名";
-                            break;
-                        case "student_code":
-                            columnName = "基础学生编号";
-                            break;
-                        default:
-                            break;
-                    }
-                    String content = SystemConstant.strNotNull(columnName) ? columnName : tooLongColumn;
-                    throw ExceptionResultEnum.SQL_ERROR.exception("[" + content + "]超过长度限制");
-                } else if (e instanceof ApiException) {
-                    ResultUtil.error((ApiException) e, e.getMessage());
-                } else {
-                    ResultUtil.error(e.getMessage());
+        }
+
+        try {
+            this.saveOrUpdateBatch(editEntityList);
+        } catch (Exception e) {
+            if (e instanceof DataIntegrityViolationException) {
+                String error = e.getCause().toString();
+                String tooLongColumn = error.substring(error.lastIndexOf("column") + 7);
+                tooLongColumn = tooLongColumn.substring(0, tooLongColumn.lastIndexOf("at") - 1);
+                tooLongColumn = tooLongColumn.replaceAll("'", "");
+                String columnName = "";
+                switch (tooLongColumn) {
+                    case "student_name":
+                        columnName = "基础学生姓名";
+                        break;
+                    case "student_code":
+                        columnName = "基础学生编号";
+                        break;
+                    default:
+                        break;
                 }
+                String content = SystemConstant.strNotNull(columnName) ? columnName : tooLongColumn;
+                throw ExceptionResultEnum.SQL_ERROR.exception("[" + content + "]超过长度限制");
+            } else if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
             }
         }
     }
@@ -283,12 +337,12 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public Map<String, Object> executeBasicStudentImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) throws IllegalAccessException {
+    public Map<String, Object> executeBasicStudentImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) {
         SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
         for (int i = 0; i < finalList.size(); i++) {
             LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
             List<Object> basicStudentImportDtoList = excelMap.get(i);
-            if (CollectionUtils.isEmpty(basicStudentImportDtoList)){
+            if (CollectionUtils.isEmpty(basicStudentImportDtoList)) {
                 continue;
             }
             List<BasicStudentImportDto> datasource = basicStudentImportDtoList.stream().map(e -> {
@@ -305,9 +359,10 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
                 basicStudentExtrasParam.setCollegeName(StringUtils.isNotBlank(e.getCollegeName()) ? e.getCollegeName().trim() : null);
                 basicStudentExtrasParam.setMajorName(StringUtils.isNotBlank(e.getMajorName()) ? e.getMajorName().trim() : null);
                 basicStudentExtrasParam.setClazzName(StringUtils.isNotBlank(e.getClazzName()) ? e.getClazzName().trim() : null);
+                basicStudentExtrasParam.setRowIndex(e.getRowIndex());
                 return Stream.of(basicStudentExtrasParam);
             }).collect(Collectors.toList());
-            this.saveBasicStudentWithExtrasList(basicStudentExtrasParamList, sysUser, true);
+            this.saveBasicStudentWithExtrasList(basicStudentExtrasParamList, sysUser, true, map);
         }
         return map;
     }

+ 4 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -31,6 +31,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.web.multipart.MultipartFile;
@@ -146,7 +147,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     }
 
     @Override
-    @Transactional
+    @Transactional(propagation = Propagation.NESTED)
     public boolean saveOrg(SysOrg org, SysUser sysUser) {
         boolean success = false;
         try {
@@ -163,7 +164,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
                 }
 
                 // 机构代码以code开头,则清除缓存
-                if(org.getCode().startsWith(SystemConstant.ORG_PREFIX)){
+                if (org.getCode().startsWith(SystemConstant.ORG_PREFIX)) {
                     commonCacheService.removeMaxOrgCode(schoolId);
                 }
             }
@@ -541,7 +542,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     public void executeImportSysOrgLogic(MultipartFile file) {
         try {
             InputStream inputStream = file.getInputStream();
-            List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(SysOrgImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> finalExcelList,2);
+            List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(SysOrgImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> finalExcelList, 2);
             List<String> orgInfoList = new ArrayList<>();
             for (int i = 0; i < finalList.size(); i++) {
                 LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);