|
@@ -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;
|
|
|
}
|