|
@@ -32,6 +32,7 @@ import cn.com.qmth.examcloud.core.basic.api.response.InsertOrUpdateStudentResp;
|
|
|
import cn.com.qmth.examcloud.core.examwork.dao.ExamStudentTempRepo;
|
|
|
import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamStudentTempEntity;
|
|
|
import cn.com.qmth.examcloud.core.examwork.service.ExamStudentImportService;
|
|
|
+import cn.com.qmth.examcloud.core.examwork.service.bean.ExamStudentImportResult;
|
|
|
import cn.com.qmth.examcloud.core.examwork.service.bean.ExamStudentInfo;
|
|
|
|
|
|
/**
|
|
@@ -62,7 +63,8 @@ public class ExamStudentImportServiceImpl implements ExamStudentImportService {
|
|
|
private EntityManagerFactory entityManagerFactory;
|
|
|
|
|
|
@Override
|
|
|
- public void importExamStudent(File file, String fileName, Long rootOrgId, Long examId) {
|
|
|
+ public ExamStudentImportResult importExamStudent(File file, String fileName, Long rootOrgId,
|
|
|
+ Long examId) {
|
|
|
Workbook workBook = ExcelParser.getWorkBook(file, fileName);
|
|
|
|
|
|
Sheet sheet = workBook.getSheetAt(0);
|
|
@@ -77,6 +79,10 @@ public class ExamStudentImportServiceImpl implements ExamStudentImportService {
|
|
|
List<ExamStudentTempEntity> list = Lists.newArrayList();
|
|
|
long batchId = System.currentTimeMillis();
|
|
|
|
|
|
+ ExamStudentImportResult result = new ExamStudentImportResult();
|
|
|
+ List<String> failRecords = Lists.newArrayList();
|
|
|
+ result.setFailRecords(failRecords);
|
|
|
+
|
|
|
for (int i = 0; i < lineList.size(); i++) {
|
|
|
String[] line = lineList.get(i);
|
|
|
if (0 == i) {
|
|
@@ -85,6 +91,7 @@ public class ExamStudentImportServiceImpl implements ExamStudentImportService {
|
|
|
}
|
|
|
|
|
|
ExamStudentTempEntity es = new ExamStudentTempEntity();
|
|
|
+ es.setLineNum((long) 1 + i);
|
|
|
es.setRootOrgId(rootOrgId);
|
|
|
es.setExamId(examId);
|
|
|
es.setBatchId(batchId);
|
|
@@ -102,6 +109,10 @@ public class ExamStudentImportServiceImpl implements ExamStudentImportService {
|
|
|
es.setPhone(trimAndNullIfBlank(line[11]));
|
|
|
es.setGrade(trimAndNullIfBlank(line[12]));
|
|
|
|
|
|
+ if (hasError(failRecords, es)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
list.add(es);
|
|
|
if (0 == i % 100) {
|
|
|
examStudentTempRepo.save(list);
|
|
@@ -117,6 +128,104 @@ public class ExamStudentImportServiceImpl implements ExamStudentImportService {
|
|
|
saveExamStudents(batchId);
|
|
|
|
|
|
delete(batchId);
|
|
|
+
|
|
|
+ findError(failRecords, batchId);
|
|
|
+
|
|
|
+ result.setFailNum(failRecords.size());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void findError(List<String> failRecords, long batchId) {
|
|
|
+ EntityManager em = entityManagerFactory.createEntityManager();
|
|
|
+ Query query = em.createQuery("select s from ExamStudentTempEntity s where "
|
|
|
+ + "s.batchId=:batchId and (s.orgId is null or s.courseId is null) order by s.lineNum",
|
|
|
+ ExamStudentTempEntity.class);
|
|
|
+ query.setHint("javax.persistence.cache.retrieveMode", CacheRetrieveMode.BYPASS);
|
|
|
+ query.setParameter("batchId", batchId);
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ List<ExamStudentTempEntity> errorList = query.getResultList();
|
|
|
+
|
|
|
+ for (ExamStudentTempEntity cur : errorList) {
|
|
|
+ boolean hasError = false;
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ sb.append("第" + cur.getLineNum() + "行");
|
|
|
+ if (null == cur.getOrgId()) {
|
|
|
+ sb.append(" 学习中心代码错误");
|
|
|
+ hasError = true;
|
|
|
+ }
|
|
|
+ if (null == cur.getCourseId()) {
|
|
|
+ sb.append(" 课程代码错误");
|
|
|
+ hasError = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (hasError) {
|
|
|
+ failRecords.add(sb.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean hasError(List<String> failRecords, ExamStudentTempEntity entity) {
|
|
|
+ boolean hasError = false;
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ sb.append("第" + entity.getLineNum() + "行");
|
|
|
+
|
|
|
+ String name = entity.getName();
|
|
|
+ if (StringUtils.isBlank(name)) {
|
|
|
+ sb.append(" 姓名不能为空");
|
|
|
+ hasError = true;
|
|
|
+ } else if (20 < name.length()) {
|
|
|
+ sb.append(" 姓名不能超过20个字符");
|
|
|
+ hasError = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ String identityNumber = entity.getIdentityNumber();
|
|
|
+ if (StringUtils.isBlank(identityNumber)) {
|
|
|
+ sb.append(" 身份证号不能为空");
|
|
|
+ hasError = true;
|
|
|
+ } else if (identityNumber.length() < 6) {
|
|
|
+ sb.append(" 身份证号至少为6个字符");
|
|
|
+ hasError = true;
|
|
|
+ } else if (identityNumber.length() > 30) {
|
|
|
+ sb.append(" 身份证号不能超过30个字符");
|
|
|
+ hasError = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ String studentCode = entity.getStudentCode();
|
|
|
+ if (StringUtils.isNotBlank(studentCode)) {
|
|
|
+ if (studentCode.length() < 6) {
|
|
|
+ sb.append(" 学号至少为6个字符");
|
|
|
+ hasError = true;
|
|
|
+ } else if (studentCode.length() > 30) {
|
|
|
+ sb.append(" 学号不能超过30个字符");
|
|
|
+ hasError = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ String courseCode = entity.getCourseCode();
|
|
|
+ if (StringUtils.isBlank(courseCode)) {
|
|
|
+ sb.append(" 课程代码不能为空");
|
|
|
+ hasError = true;
|
|
|
+ } else if (courseCode.length() > 30) {
|
|
|
+ sb.append(" 课程代码不能超过30个字符");
|
|
|
+ hasError = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ String orgCode = entity.getOrgCode();
|
|
|
+ if (StringUtils.isBlank(orgCode)) {
|
|
|
+ sb.append(" 学习中心代码不能为空");
|
|
|
+ hasError = true;
|
|
|
+ } else if (orgCode.length() > 30) {
|
|
|
+ sb.append(" 学习中心代码不能超过30个字符");
|
|
|
+ hasError = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (hasError) {
|
|
|
+ failRecords.add(sb.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ return hasError;
|
|
|
}
|
|
|
|
|
|
private void delete(Long batchId) {
|