|
@@ -28,10 +28,7 @@ import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
import com.qmth.teachcloud.common.entity.*;
|
|
|
import com.qmth.teachcloud.common.enums.*;
|
|
|
import com.qmth.teachcloud.common.service.*;
|
|
|
-import com.qmth.teachcloud.common.util.ConvertUtil;
|
|
|
-import com.qmth.teachcloud.common.util.RedisUtil;
|
|
|
-import com.qmth.teachcloud.common.util.ResultUtil;
|
|
|
-import com.qmth.teachcloud.common.util.ServletUtil;
|
|
|
+import com.qmth.teachcloud.common.util.*;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.poi.ss.usermodel.FillPatternType;
|
|
|
import org.apache.poi.ss.usermodel.Font;
|
|
@@ -44,6 +41,7 @@ import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.dao.DataIntegrityViolationException;
|
|
|
+import org.springframework.jdbc.BadSqlGrammarException;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
@@ -572,66 +570,78 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
public List<Long> disposeExamDataByExaminationExcel(ExamPrintPlan examPrintPlan, List<ExaminationImportDto> dataList, SerialNumberParams serialNumberParams, SysUser sysUser) {
|
|
|
- List<Map<String, Object>> examDetailKeyList = dataList.stream().flatMap(e -> {
|
|
|
- Long schoolIdId = e.getSchoolId();
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("schoolId", schoolIdId);
|
|
|
- map.put("examPlace", e.getExamPlace());
|
|
|
- map.put("examRoom", e.getExamRoom());
|
|
|
- map.put("examStartTime", e.getExamStartTime());
|
|
|
- map.put("examEndTime", e.getExamEndTime());
|
|
|
- return Stream.of(map);
|
|
|
- }).distinct().collect(Collectors.toList());
|
|
|
+ try {
|
|
|
+ List<Map<String, Object>> examDetailKeyList = dataList.stream().flatMap(e -> {
|
|
|
+ Long schoolIdId = e.getSchoolId();
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("schoolId", schoolIdId);
|
|
|
+ map.put("examPlace", e.getExamPlace());
|
|
|
+ map.put("examRoom", e.getExamRoom());
|
|
|
+ map.put("examStartTime", e.getExamStartTime());
|
|
|
+ map.put("examEndTime", e.getExamEndTime());
|
|
|
+ return Stream.of(map);
|
|
|
+ }).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<Long> examDetailIdList = new ArrayList<>();
|
|
|
+ for (Map<String, Object> map : examDetailKeyList) {
|
|
|
+ Long schoolId = Long.valueOf(String.valueOf(map.get("schoolId")));
|
|
|
+ String examPlace = String.valueOf(map.get("examPlace"));
|
|
|
+ String examRoom = String.valueOf(map.get("examRoom"));
|
|
|
+ String examStartTime = String.valueOf(map.get("examStartTime"));
|
|
|
+ String examEndTime = String.valueOf(map.get("examEndTime"));
|
|
|
+
|
|
|
+ QueryWrapper<ExamDetail> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.lambda().eq(ExamDetail::getSchoolId, schoolId)
|
|
|
+ .eq(ExamDetail::getPrintPlanId, examPrintPlan.getId())
|
|
|
+ .eq(ExamDetail::getExamPlace, examPlace)
|
|
|
+ .eq(ExamDetail::getExamRoom, examRoom)
|
|
|
+ .eq(ExamDetail::getExamStartTime, SystemConstant.convertIdToLong(examStartTime))
|
|
|
+ .eq(ExamDetail::getExamEndTime, SystemConstant.convertIdToLong(examEndTime));
|
|
|
+ ExamDetail examDetailOld = this.getOne(queryWrapper);
|
|
|
+ if (examDetailOld != null) {
|
|
|
+ this.deleteExaminationDataByExamDetailIds(Arrays.asList(examDetailOld.getId()));
|
|
|
+ }
|
|
|
|
|
|
- List<Long> examDetailIdList = new ArrayList<>();
|
|
|
- for (Map<String, Object> map : examDetailKeyList) {
|
|
|
- Long schoolId = Long.valueOf(String.valueOf(map.get("schoolId")));
|
|
|
- String examPlace = String.valueOf(map.get("examPlace"));
|
|
|
- String examRoom = String.valueOf(map.get("examRoom"));
|
|
|
- String examStartTime = String.valueOf(map.get("examStartTime"));
|
|
|
- String examEndTime = String.valueOf(map.get("examEndTime"));
|
|
|
-
|
|
|
- QueryWrapper<ExamDetail> queryWrapper = new QueryWrapper<>();
|
|
|
- queryWrapper.lambda().eq(ExamDetail::getSchoolId, schoolId)
|
|
|
- .eq(ExamDetail::getPrintPlanId, examPrintPlan.getId())
|
|
|
- .eq(ExamDetail::getExamPlace, examPlace)
|
|
|
- .eq(ExamDetail::getExamRoom, examRoom)
|
|
|
- .eq(ExamDetail::getExamStartTime, SystemConstant.convertIdToLong(examStartTime))
|
|
|
- .eq(ExamDetail::getExamEndTime, SystemConstant.convertIdToLong(examEndTime));
|
|
|
- ExamDetail examDetailOld = this.getOne(queryWrapper);
|
|
|
- if (examDetailOld != null) {
|
|
|
- this.deleteExaminationDataByExamDetailIds(Arrays.asList(examDetailOld.getId()));
|
|
|
+ List<ExaminationImportDto> examDetailStudentList = dataList.stream().filter(e -> e.getExamPlace().equals(examPlace) &&
|
|
|
+ e.getExamRoom().equals(examRoom) && e.getExamStartTime().equals(examStartTime) && e.getExamEndTime().equals(examEndTime))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ ExamDetail examDetail = new ExamDetail();
|
|
|
+ examDetail.setId(SystemConstant.getDbUuid());
|
|
|
+ examDetail.setPackageCode(convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit()));
|
|
|
+ examDetail.setSchoolId(schoolId);
|
|
|
+ examDetail.setOrgId(sysUser.getOrgId());
|
|
|
+ examDetail.setPrintPlanId(examPrintPlan.getId());
|
|
|
+ examDetail.setPrintPlanName(examPrintPlan.getName());
|
|
|
+ examDetail.setExamId(examPrintPlan.getExamId());
|
|
|
+ examDetail.setExamPlace(examPlace);
|
|
|
+ examDetail.setExamRoom(examRoom);
|
|
|
+ examDetail.setStatus(ExamDetailStatusEnum.NEW);
|
|
|
+ examDetail.setTotalSubjects(examDetailStudentList.size());
|
|
|
+ examDetail.setExamStartTime(SystemConstant.convertIdToLong(examStartTime));
|
|
|
+ examDetail.setExamEndTime(SystemConstant.convertIdToLong(examEndTime));
|
|
|
+ examDetail.setExamDataSource(ExamDataSourceEnum.FILE_IMPORT);
|
|
|
+ examDetail.setNormal(true);
|
|
|
+ examDetail.setCreateId(sysUser.getId());
|
|
|
+ examDetail.setBackupCount(examPrintPlan.getBackupCount());
|
|
|
+ this.save(examDetail);
|
|
|
+ examDetailIdList.add(examDetail.getId());
|
|
|
+
|
|
|
+ //组装exam_detail_course数据
|
|
|
+ disposeExamDetailCourseData(examPrintPlan.getExamId(), examDetail.getId(), examDetailStudentList, sysUser);
|
|
|
}
|
|
|
-
|
|
|
- List<ExaminationImportDto> examDetailStudentList = dataList.stream().filter(e -> e.getExamPlace().equals(examPlace) &&
|
|
|
- e.getExamRoom().equals(examRoom) && e.getExamStartTime().equals(examStartTime) && e.getExamEndTime().equals(examEndTime))
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- ExamDetail examDetail = new ExamDetail();
|
|
|
- examDetail.setId(SystemConstant.getDbUuid());
|
|
|
- examDetail.setPackageCode(convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit()));
|
|
|
- examDetail.setSchoolId(schoolId);
|
|
|
- examDetail.setOrgId(sysUser.getOrgId());
|
|
|
- examDetail.setPrintPlanId(examPrintPlan.getId());
|
|
|
- examDetail.setPrintPlanName(examPrintPlan.getName());
|
|
|
- examDetail.setExamId(examPrintPlan.getExamId());
|
|
|
- examDetail.setExamPlace(examPlace);
|
|
|
- examDetail.setExamRoom(examRoom);
|
|
|
- examDetail.setStatus(ExamDetailStatusEnum.NEW);
|
|
|
- examDetail.setTotalSubjects(examDetailStudentList.size());
|
|
|
- examDetail.setExamStartTime(SystemConstant.convertIdToLong(examStartTime));
|
|
|
- examDetail.setExamEndTime(SystemConstant.convertIdToLong(examEndTime));
|
|
|
- examDetail.setExamDataSource(ExamDataSourceEnum.FILE_IMPORT);
|
|
|
- examDetail.setNormal(true);
|
|
|
- examDetail.setCreateId(sysUser.getId());
|
|
|
- examDetail.setBackupCount(examPrintPlan.getBackupCount());
|
|
|
- this.save(examDetail);
|
|
|
- examDetailIdList.add(examDetail.getId());
|
|
|
-
|
|
|
- //组装exam_detail_course数据
|
|
|
- disposeExamDetailCourseData(examPrintPlan.getExamId(), examDetail.getId(), examDetailStudentList, sysUser);
|
|
|
- }
|
|
|
- return examDetailIdList;
|
|
|
+ return examDetailIdList;
|
|
|
+ } catch (Exception e) {
|
|
|
+ if (e instanceof DataIntegrityViolationException || e instanceof BadSqlGrammarException) {
|
|
|
+ String content = JdbcErrorUtil.parseErrorMsg(e.getMessage().toString());
|
|
|
+ throw ExceptionResultEnum.SQL_ERROR.exception(content);
|
|
|
+ } else if (e instanceof ApiException) {
|
|
|
+ ResultUtil.error((ApiException) e, e.getMessage());
|
|
|
+ } else {
|
|
|
+ ResultUtil.error(e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -732,40 +742,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
|
|
|
examStudentList.add(examStudent);
|
|
|
}
|
|
|
|
|
|
- // 校验准考证号是否重复
|
|
|
-// if (!ticketNumberRepeatList.isEmpty()) {
|
|
|
-// stringJoiner.add("考号[" + String.join(",", ticketNumberRepeatList) + "]在当前考试下已存在");
|
|
|
-// }
|
|
|
-// if (stringJoiner.toString().length() > 1) {
|
|
|
-// throw ExceptionResultEnum.ERROR.exception(stringJoiner.toString());
|
|
|
-// }
|
|
|
- try {
|
|
|
- examStudentService.saveBatch(examStudentList);
|
|
|
- } 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());
|
|
|
- }
|
|
|
- }
|
|
|
+ examStudentService.saveBatch(examStudentList);
|
|
|
}
|
|
|
|
|
|
@Override
|