|
@@ -15,6 +15,7 @@ import cn.com.qmth.stmms.biz.utils.PictureTag;
|
|
|
import cn.com.qmth.stmms.biz.utils.ScoreItem;
|
|
|
import cn.com.qmth.stmms.common.enums.Role;
|
|
|
import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
|
|
|
+
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.apache.commons.lang.math.RandomUtils;
|
|
|
import org.hibernate.SQLQuery;
|
|
@@ -31,6 +32,7 @@ import javax.persistence.EntityManager;
|
|
|
import javax.persistence.PersistenceContext;
|
|
|
import javax.persistence.Query;
|
|
|
import javax.persistence.criteria.*;
|
|
|
+
|
|
|
import java.math.BigDecimal;
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.util.*;
|
|
@@ -171,8 +173,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
if (student.getSecretNumber() == null) {
|
|
|
student.randomSecretNumber();
|
|
|
while (secretNumberSet.contains(student.getSecretNumber())
|
|
|
- || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber())
|
|
|
- > 0) {
|
|
|
+ || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber()) > 0) {
|
|
|
student.randomSecretNumber();
|
|
|
}
|
|
|
}
|
|
@@ -401,10 +402,10 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
@Transactional
|
|
|
public boolean updateScanInfo(ExamStudent student) {
|
|
|
student.setUploadTime(new Date());
|
|
|
- return studentDao
|
|
|
- .updateScanInfo(student.getId(), student.getSheetCount(), student.getSliceCount(), student.getAnswers(),
|
|
|
- student.getBatchCode(), student.getPaperType(), student.isAbsent(), student.getUploadTime(),
|
|
|
- student.getObjectiveScore(), student.getObjectiveScoreList(), student.getCardNumber()) > 0;
|
|
|
+ return studentDao.updateScanInfo(student.getId(), student.getSheetCount(), student.getSliceCount(),
|
|
|
+ student.getAnswers(), student.getBatchCode(), student.getPaperType(), student.isAbsent(),
|
|
|
+ student.getUploadTime(), student.getObjectiveScore(), student.getObjectiveScoreList(),
|
|
|
+ student.getCardNumber()) > 0;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -460,12 +461,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
studentDao.updateSubjectiveStatusAndScore(id, status, score, scoreList, null, null);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- @Transactional
|
|
|
- public void resetSubjectiveStatusAndScoreWithoutTrial(Integer examId, String subjectCode) {
|
|
|
- studentDao.updateSubjectiveStatusAndScoreWithoutStatus(examId, subjectCode, SubjectiveStatus.UNMARK, 0, null,
|
|
|
- null, null, SubjectiveStatus.TRIAL);
|
|
|
- }
|
|
|
+ // @Override
|
|
|
+ // @Transactional
|
|
|
+ // public void resetSubjectiveStatusAndScoreWithoutTrial(Integer examId,
|
|
|
+ // String subjectCode) {
|
|
|
+ // studentDao.updateSubjectiveStatusAndScoreWithoutStatus(examId,
|
|
|
+ // subjectCode, SubjectiveStatus.UNMARK, 0, null,
|
|
|
+ // null, null, SubjectiveStatus.TRIAL);
|
|
|
+ // }
|
|
|
|
|
|
@Override
|
|
|
@Transactional
|
|
@@ -492,14 +495,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
@Override
|
|
|
public Predicate toPredicate(Root<ExamStudent> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
|
|
|
List<Predicate> predicates = new LinkedList<Predicate>();
|
|
|
- Expression<Double> evaluationItemSum = cb
|
|
|
- .sum(root.get("objectiveScore").as(Double.class), root.get("subjectiveScore").as(Double.class));
|
|
|
+ Expression<Double> evaluationItemSum = cb.sum(root.get("objectiveScore").as(Double.class),
|
|
|
+ root.get("subjectiveScore").as(Double.class));
|
|
|
if (query.getStartScore() != null) {
|
|
|
Predicate predicate1 = cb.ge(evaluationItemSum, query.getStartScore());
|
|
|
Predicate predicate2 = cb.le(evaluationItemSum, query.getEndScore());
|
|
|
if (query.getStartScore() == 0) {
|
|
|
- Predicate predicate = cb
|
|
|
- .or(cb.equal(root.get("absent"), true), cb.equal(root.get("breach"), true));
|
|
|
+ Predicate predicate = cb.or(cb.equal(root.get("absent"), true),
|
|
|
+ cb.equal(root.get("breach"), true));
|
|
|
Predicate predicate3 = cb.and(predicate1, predicate2);
|
|
|
predicates.add(cb.or(predicate, predicate3));
|
|
|
} else {
|
|
@@ -614,6 +617,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
if (query.getException() != null) {
|
|
|
predicates.add(cb.equal(root.get("exception"), query.getException()));
|
|
|
}
|
|
|
+ if (query.getTrial() != null) {
|
|
|
+ predicates.add(cb.equal(root.get("trial"), query.getTrial()));
|
|
|
+ }
|
|
|
if (query.getManualAbsent() != null) {
|
|
|
predicates.add(cb.equal(root.get("manualAbsent"), query.getManualAbsent()));
|
|
|
}
|
|
@@ -710,9 +716,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
if (query.getSheetCount() != null) {
|
|
|
predicates.add(cb.equal(root.get("sheetCount"), query.getSheetCount()));
|
|
|
}
|
|
|
- return predicates.isEmpty() ?
|
|
|
- cb.conjunction() :
|
|
|
- cb.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
|
+ return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
|
|
|
+ .size()]));
|
|
|
}
|
|
|
};
|
|
|
}
|
|
@@ -731,8 +736,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
@Override
|
|
|
public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
|
|
|
String studentCode, String examSeqCode) {
|
|
|
- return studentDao
|
|
|
- .findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode, examSeqCode);
|
|
|
+ return studentDao.findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode,
|
|
|
+ examSeqCode);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -774,14 +779,13 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public ExamStudent randomUnTrialStudent(Integer examId, String subjectCode, Integer groupNumber) {
|
|
|
+ public List<ExamStudent> findUnTrialStudent(Integer examId, String subjectCode, Integer groupNumber) {
|
|
|
ExamStudentSearchQuery query = new ExamStudentSearchQuery();
|
|
|
query.setPageNumber(1);
|
|
|
- query.setPageSize(1);
|
|
|
+ query.setPageSize(Integer.MAX_VALUE);
|
|
|
query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
|
|
|
- List<ExamStudent> list = studentDao
|
|
|
- .findUnTrialStudent(examId, subjectCode, groupNumber, SubjectiveStatus.TRIAL, query);
|
|
|
- return list.isEmpty() ? null : list.get(0);
|
|
|
+ List<ExamStudent> list = studentDao.findUnTrialStudent(examId, subjectCode, groupNumber, true, query);
|
|
|
+ return list;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -806,8 +810,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
return countByQuery(query);
|
|
|
}
|
|
|
|
|
|
- public long countByNoAbsentAndBreach(int examId, String subjectCode, boolean upload, boolean absent,
|
|
|
- boolean breach) {
|
|
|
+ public long countByNoAbsentAndBreach(int examId, String subjectCode, boolean upload, boolean absent, boolean breach) {
|
|
|
ExamStudentSearchQuery query = new ExamStudentSearchQuery();
|
|
|
query.setExamId(examId);
|
|
|
query.setSubjectCode(subjectCode);
|
|
@@ -860,8 +863,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
sliceConfig = exam.getSliceConfigList();
|
|
|
}
|
|
|
if (!sliceConfig.isEmpty()) {
|
|
|
- List<PictureTag> tags = PictureConfigTransform
|
|
|
- .process(sliceConfig, getSliceTags(student, withGroupScore, sliceConfig)).get(index);
|
|
|
+ List<PictureTag> tags = PictureConfigTransform.process(sliceConfig,
|
|
|
+ getSliceTags(student, withGroupScore, sliceConfig)).get(index);
|
|
|
if (tags != null) {
|
|
|
list.addAll(tags);
|
|
|
}
|
|
@@ -911,8 +914,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
public Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student, boolean withGroupScore,
|
|
|
List<PictureConfigItem> sliceConfig) {
|
|
|
Map<MarkGroup, List<OriginTag>> tagMap = new HashMap<MarkGroup, List<OriginTag>>();
|
|
|
- List<ExamQuestion> questions = questionService
|
|
|
- .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
|
|
|
+ List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
|
|
|
+ student.getSubjectCode(), false);
|
|
|
List<ScoreItem> scoreList = student.getScoreList(false);
|
|
|
List<MarkGroup> markGroups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
|
|
|
for (MarkGroup group : markGroups) {
|
|
@@ -934,14 +937,13 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
List<String> lines = new LinkedList<>();
|
|
|
lines.add("成绩明细");
|
|
|
// 总分得分明细
|
|
|
- lines.add("总分 (客观+主观) | " + format.format(student.getTotalScore()) + "=" + format
|
|
|
- .format(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0) + "+" + format
|
|
|
- .format(student.getSubjectiveScore() != null ? student.getSubjectiveScore() : 0));
|
|
|
+ lines.add("总分 (客观+主观) | " + format.format(student.getTotalScore()) + "="
|
|
|
+ + format.format(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0) + "+"
|
|
|
+ + format.format(student.getSubjectiveScore() != null ? student.getSubjectiveScore() : 0));
|
|
|
// 客观题得分明细
|
|
|
List<String> objectives = new LinkedList<>();
|
|
|
- List<ExamQuestion> questions = questionService
|
|
|
- .findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(), student.getSubjectCode(), true,
|
|
|
- student.getPaperType());
|
|
|
+ List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndPaperType(
|
|
|
+ student.getExamId(), student.getSubjectCode(), true, student.getPaperType());
|
|
|
List<ScoreItem> scoreList = student.getScoreList(true);
|
|
|
List<String> details = new ArrayList<>();
|
|
|
int i = 0;
|
|
@@ -1024,9 +1026,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
if (config.getX() <= 1 && config.getY() <= 1 && config.getI() <= sliceConfig.size()
|
|
|
&& sliceConfig.get(config.getI() - 1).getW() > 0
|
|
|
&& sliceConfig.get(config.getI() - 1).getH() > 0) {
|
|
|
- tag = new OriginTag(0, group.getNumber(), format.format(score), config.getI(),
|
|
|
- config.getX() * sliceConfig.get(config.getI() - 1).getW(),
|
|
|
- config.getY() * sliceConfig.get(config.getI() - 1).getH());
|
|
|
+ tag = new OriginTag(0, group.getNumber(), format.format(score), config.getI(), config.getX()
|
|
|
+ * sliceConfig.get(config.getI() - 1).getW(), config.getY()
|
|
|
+ * sliceConfig.get(config.getI() - 1).getH());
|
|
|
}
|
|
|
originTags.add(tag);
|
|
|
}
|
|
@@ -1068,16 +1070,16 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
List<MarkTrack> tracks = trackService.findByLibraryId(library.getId());
|
|
|
for (MarkTrack markTrack : tracks) {
|
|
|
// 未作答时只显示汉字"空"
|
|
|
- originTags.add(new OriginTag(library.getMarkerId(), library.getGroupNumber(),
|
|
|
- markTrack.isUnanswered() ? "空" : format.format(markTrack.getScore()),
|
|
|
- markTrack.getOffsetIndex(), markTrack.getOffsetX(), markTrack.getOffsetY()));
|
|
|
+ originTags.add(new OriginTag(library.getMarkerId(), library.getGroupNumber(), markTrack
|
|
|
+ .isUnanswered() ? "空" : format.format(markTrack.getScore()), markTrack.getOffsetIndex(),
|
|
|
+ markTrack.getOffsetX(), markTrack.getOffsetY()));
|
|
|
}
|
|
|
// 添加特殊标记
|
|
|
List<MarkSpecialTag> specialTags = specialTagService.findByLibraryId(library.getId());
|
|
|
for (MarkSpecialTag markSpecialTag : specialTags) {
|
|
|
- originTags.add(new OriginTag(library.getMarkerId(), library.getGroupNumber(),
|
|
|
- markSpecialTag.getTagName(), markSpecialTag.getOffsetIndex(), markSpecialTag.getOffsetX(),
|
|
|
- markSpecialTag.getOffsetY()));
|
|
|
+ originTags.add(new OriginTag(library.getMarkerId(), library.getGroupNumber(), markSpecialTag
|
|
|
+ .getTagName(), markSpecialTag.getOffsetIndex(), markSpecialTag.getOffsetX(), markSpecialTag
|
|
|
+ .getOffsetY()));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1126,19 +1128,16 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<ExamStudent> findByExamIdAndStudentCodeAndSubjectCode(int examId, String studentCode,
|
|
|
- String subjectCode) {
|
|
|
+ public List<ExamStudent> findByExamIdAndStudentCodeAndSubjectCode(int examId, String studentCode, String subjectCode) {
|
|
|
return studentDao.findByExamIdAndStudentCodeAndSubjectCode(examId, studentCode, subjectCode);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public long countByExamIdAndSubjectCodeAndStatus(int examId, String subjectCode, SubjectiveStatus... status) {
|
|
|
+ public long countByExamIdAndSubjectCodeAndTrial(int examId, String subjectCode, boolean trial) {
|
|
|
ExamStudentSearchQuery query = new ExamStudentSearchQuery();
|
|
|
query.setExamId(examId);
|
|
|
query.setSubjectCode(subjectCode);
|
|
|
- for (SubjectiveStatus subjectiveStatus : status) {
|
|
|
- query.addStatus(subjectiveStatus);
|
|
|
- }
|
|
|
+ query.setTrial(trial);
|
|
|
return countByQuery(query);
|
|
|
}
|
|
|
|
|
@@ -1279,9 +1278,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
public int batchUpdate(List<ExamStudent> updateList) {
|
|
|
int i = 0;
|
|
|
for (ExamStudent student : updateList) {
|
|
|
- i = i + this.studentDao
|
|
|
- .updateInfo(student.getId(), student.getCollege(), student.getClassName(), student.getTeacher(),
|
|
|
- student.getExamRoom(), student.getExamSite(), student.getRemark());
|
|
|
+ i = i
|
|
|
+ + this.studentDao.updateInfo(student.getId(), student.getCollege(), student.getClassName(),
|
|
|
+ student.getTeacher(), student.getExamRoom(), student.getExamSite(), student.getRemark());
|
|
|
}
|
|
|
return i;
|
|
|
}
|
|
@@ -1303,202 +1302,210 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
public void cancelInspect(Integer studentId) {
|
|
|
studentDao.cancelInspect(studentId);
|
|
|
}
|
|
|
-
|
|
|
|
|
|
- @Override
|
|
|
- public ExamStudentSearchQuery findByQueryPlus(ExamStudentSearchQuery query) {
|
|
|
- checkQuery(query);
|
|
|
+ @Override
|
|
|
+ public ExamStudentSearchQuery findByQueryPlus(ExamStudentSearchQuery query) {
|
|
|
+ checkQuery(query);
|
|
|
if (query.getSheetCount() != null) {
|
|
|
query.setSheetCount(query.getSheetCount() * 2);
|
|
|
}
|
|
|
Integer totalCount = countByQueryPlus(query);
|
|
|
- if(totalCount>0) {
|
|
|
- List<ExamStudent> list = findByQuerySql(query);
|
|
|
- query.setResult(list);
|
|
|
- query.setTotalCount(totalCount);
|
|
|
- }else {
|
|
|
- query.setResult(new ArrayList<>());
|
|
|
- query.setTotalCount(0);
|
|
|
- }
|
|
|
+ if (totalCount > 0) {
|
|
|
+ List<ExamStudent> list = findByQuerySql(query);
|
|
|
+ query.setResult(list);
|
|
|
+ query.setTotalCount(totalCount);
|
|
|
+ } else {
|
|
|
+ query.setResult(new ArrayList<>());
|
|
|
+ query.setTotalCount(0);
|
|
|
+ }
|
|
|
if (query.getSheetCount() != null) {
|
|
|
query.setSheetCount(query.getSheetCount() / 2);
|
|
|
}
|
|
|
return query;
|
|
|
- }
|
|
|
-
|
|
|
- private Integer countByQueryPlus(ExamStudentSearchQuery req) {
|
|
|
- StringBuilder sql = new StringBuilder();
|
|
|
- sql.append("select count(1) ");
|
|
|
- sql.append("from eb_exam_student s ");
|
|
|
- sql.append(getWhereSql(req));
|
|
|
- Query query = entityManager.createNativeQuery(sql.toString());
|
|
|
- return Integer.valueOf(query.getResultList().get(0).toString());
|
|
|
- }
|
|
|
-
|
|
|
- @SuppressWarnings("unchecked")
|
|
|
- private List<ExamStudent> findByQuerySql(ExamStudentSearchQuery req) {
|
|
|
- int offset = (req.getPageNumber() - 1) * req.getPageSize();
|
|
|
- StringBuilder sql = new StringBuilder();
|
|
|
- sql.append(
|
|
|
- " select s.sheet_count sheetCount,s.exam_number examNumber,s.exam_id examId,s.id,s.student_code studentCode,s.name");
|
|
|
- sql.append(
|
|
|
- " ,s.subject_code subjectCode,s.subject_name subjectName,s.is_upload upload,s.is_breach breach,s.is_absent absent,s.subjective_score subjectiveScore ");
|
|
|
- sql.append(
|
|
|
- " ,s.score_verify_time scoreVerifyTime,s.subjective_score_list subjectiveScoreList,s.objective_score objectiveScore ");
|
|
|
- sql.append(" ,s.subject_level subjectLevel,s.subject_category subjectCategory,s.college,s.class_name className,s.teacher ");
|
|
|
- sql.append(" ,s.exam_site examSite,s.exam_room examRoom,s.package_code packageCode");
|
|
|
- sql.append(" from eb_exam_student s ");
|
|
|
+ }
|
|
|
+
|
|
|
+ private Integer countByQueryPlus(ExamStudentSearchQuery req) {
|
|
|
+ StringBuilder sql = new StringBuilder();
|
|
|
+ sql.append("select count(1) ");
|
|
|
+ sql.append("from eb_exam_student s ");
|
|
|
sql.append(getWhereSql(req));
|
|
|
- sql.append(" limit " + offset + "," + req.getPageSize());
|
|
|
- Query query = entityManager.createNativeQuery(sql.toString());
|
|
|
- query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(ExamStudent.class));
|
|
|
- List<ExamStudent> ret = query.getResultList();
|
|
|
- return ret;
|
|
|
- }
|
|
|
-
|
|
|
- private String getWhereSql(ExamStudentSearchQuery query) {
|
|
|
- StringBuilder sql = new StringBuilder(" WHERE 1=1 ");
|
|
|
- if (query.getStartScore() != null) {
|
|
|
- if (query.getStartScore() == 0) {
|
|
|
- sql.append(" and (s.is_absent=1 or s.is_breach=1 or (s.subjective_score+s.objective_score>="
|
|
|
- +query.getStartScore()+" and s.subjective_score+s.objective_score<="+query.getEndScore()+") ");
|
|
|
- }else{
|
|
|
- sql.append(" and s.is_absent=0 and s.is_breach=0 and s.subjective_score+s.objective_score>="
|
|
|
- +query.getStartScore()+" and s.subjective_score+s.objective_score<="+query.getEndScore());
|
|
|
- }
|
|
|
- }
|
|
|
- if (query.getExamId() != null && query.getExamId() > 0) {
|
|
|
- sql.append(" and s.exam_id="+query.getExamId());
|
|
|
- }
|
|
|
- if (query.getSchoolId() != null) {
|
|
|
- sql.append(" and s.school_id="+query.getSchoolId());
|
|
|
- }
|
|
|
-// if (StringUtils.isNotBlank(query.getIds())) {
|
|
|
-// sql.append(" and s.id in("+query.getIds()+")");
|
|
|
-// }
|
|
|
-// if (query.getStudentIds() != null && query.getStudentIds().size() > 0) {
|
|
|
-// sql.append(" and s.id in("+StringUtils.join(query.getStudentIds(),",")+")");
|
|
|
-// }
|
|
|
- if (StringUtils.isNotBlank(query.getExamNumber())) {
|
|
|
- sql.append(" and s.exam_number='"+query.getExamNumber()+"'");
|
|
|
- }
|
|
|
- if (StringUtils.isNotEmpty(query.getSecretNumber())) {
|
|
|
- sql.append(" and s.secret_number='"+query.getSecretNumber()+"'");
|
|
|
+ Query query = entityManager.createNativeQuery(sql.toString());
|
|
|
+ return Integer.valueOf(query.getResultList().get(0).toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ private List<ExamStudent> findByQuerySql(ExamStudentSearchQuery req) {
|
|
|
+ int offset = (req.getPageNumber() - 1) * req.getPageSize();
|
|
|
+ StringBuilder sql = new StringBuilder();
|
|
|
+ sql.append(" select s.sheet_count sheetCount,s.exam_number examNumber,s.exam_id examId,s.id,s.student_code studentCode,s.name");
|
|
|
+ sql.append(" ,s.subject_code subjectCode,s.subject_name subjectName,s.is_upload upload,s.is_breach breach,s.is_absent absent,s.subjective_score subjectiveScore ");
|
|
|
+ sql.append(" ,s.score_verify_time scoreVerifyTime,s.subjective_score_list subjectiveScoreList,s.objective_score objectiveScore ");
|
|
|
+ sql.append(" ,s.subject_level subjectLevel,s.subject_category subjectCategory,s.college,s.class_name className,s.teacher ");
|
|
|
+ sql.append(" ,s.exam_site examSite,s.exam_room examRoom,s.package_code packageCode");
|
|
|
+ sql.append(" from eb_exam_student s ");
|
|
|
+ sql.append(getWhereSql(req));
|
|
|
+ sql.append(" limit " + offset + "," + req.getPageSize());
|
|
|
+ Query query = entityManager.createNativeQuery(sql.toString());
|
|
|
+ query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(ExamStudent.class));
|
|
|
+ List<ExamStudent> ret = query.getResultList();
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getWhereSql(ExamStudentSearchQuery query) {
|
|
|
+ StringBuilder sql = new StringBuilder(" WHERE 1=1 ");
|
|
|
+ if (query.getStartScore() != null) {
|
|
|
+ if (query.getStartScore() == 0) {
|
|
|
+ sql.append(" and (s.is_absent=1 or s.is_breach=1 or (s.subjective_score+s.objective_score>="
|
|
|
+ + query.getStartScore() + " and s.subjective_score+s.objective_score<=" + query.getEndScore()
|
|
|
+ + ") ");
|
|
|
+ } else {
|
|
|
+ sql.append(" and s.is_absent=0 and s.is_breach=0 and s.subjective_score+s.objective_score>="
|
|
|
+ + query.getStartScore() + " and s.subjective_score+s.objective_score<=" + query.getEndScore());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (query.getExamId() != null && query.getExamId() > 0) {
|
|
|
+ sql.append(" and s.exam_id=" + query.getExamId());
|
|
|
+ }
|
|
|
+ if (query.getSchoolId() != null) {
|
|
|
+ sql.append(" and s.school_id=" + query.getSchoolId());
|
|
|
+ }
|
|
|
+ // if (StringUtils.isNotBlank(query.getIds())) {
|
|
|
+ // sql.append(" and s.id in("+query.getIds()+")");
|
|
|
+ // }
|
|
|
+ // if (query.getStudentIds() != null && query.getStudentIds().size() >
|
|
|
+ // 0) {
|
|
|
+ // sql.append(" and s.id in("+StringUtils.join(query.getStudentIds(),",")+")");
|
|
|
+ // }
|
|
|
+ if (StringUtils.isNotBlank(query.getExamNumber())) {
|
|
|
+ sql.append(" and s.exam_number='" + query.getExamNumber() + "'");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(query.getSecretNumber())) {
|
|
|
+ sql.append(" and s.secret_number='" + query.getSecretNumber() + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(query.getStudentCode())) {
|
|
|
- sql.append(" and s.student_code='"+query.getStudentCode()+"'");
|
|
|
+ sql.append(" and s.student_code='" + query.getStudentCode() + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getSubjectCode())) {
|
|
|
- sql.append(" and s.subject_code='"+query.getSubjectCode()+"'");
|
|
|
-
|
|
|
+ sql.append(" and s.subject_code='" + query.getSubjectCode() + "'");
|
|
|
+
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getCampusName())) {
|
|
|
- sql.append(" and s.campus_name='"+query.getCampusName()+"'");
|
|
|
+ sql.append(" and s.campus_name='" + query.getCampusName() + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getName())) {
|
|
|
- sql.append(" and s.name like '"+query.getName()+"%'");
|
|
|
+ sql.append(" and s.name like '" + query.getName() + "%'");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getBatchCode())) {
|
|
|
- sql.append(" and s.batch_code='"+query.getBatchCode()+"'");
|
|
|
+ sql.append(" and s.batch_code='" + query.getBatchCode() + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getPackageCode())) {
|
|
|
- sql.append(" and s.package_code='"+query.getPackageCode()+"'");
|
|
|
+ sql.append(" and s.package_code='" + query.getPackageCode() + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getSubjectLevel())) {
|
|
|
- sql.append(" and s.subject_level='"+query.getSubjectLevel()+"'");
|
|
|
+ sql.append(" and s.subject_level='" + query.getSubjectLevel() + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getSubjectCategory())) {
|
|
|
- sql.append(" and s.subject_category='"+query.getSubjectCategory()+"'");
|
|
|
+ sql.append(" and s.subject_category='" + query.getSubjectCategory() + "'");
|
|
|
}
|
|
|
if (query.getObjectiveScore() != null) {
|
|
|
- sql.append(" and s.objective_score="+query.getObjectiveScore());
|
|
|
+ sql.append(" and s.objective_score=" + query.getObjectiveScore());
|
|
|
} else if (query.getObjectiveScoreGt() != null) {
|
|
|
- sql.append(" and s.objective_score>"+query.getObjectiveScoreGt());
|
|
|
+ sql.append(" and s.objective_score>" + query.getObjectiveScoreGt());
|
|
|
} else if (query.getObjectiveScoreLt() != null) {
|
|
|
- sql.append(" and s.objective_score<"+query.getObjectiveScoreLt());
|
|
|
+ sql.append(" and s.objective_score<" + query.getObjectiveScoreLt());
|
|
|
}
|
|
|
if (query.getStatusSet() != null && query.getStatusSet().size() > 0) {
|
|
|
- List<String> codes = query.getStatusSet().stream().map(e->e.name()).collect(Collectors.toList());
|
|
|
- sql.append(" and s.subjective_status in('"+StringUtils.join(codes,"','")+"')");
|
|
|
+ List<String> codes = query.getStatusSet().stream().map(e -> e.name()).collect(Collectors.toList());
|
|
|
+ sql.append(" and s.subjective_status in('" + StringUtils.join(codes, "','") + "')");
|
|
|
}
|
|
|
if (query.getSubjectiveScore() != null) {
|
|
|
- sql.append(" and s.subjective_score="+query.getSubjectiveScore());
|
|
|
+ sql.append(" and s.subjective_score=" + query.getSubjectiveScore());
|
|
|
} else if (query.getSubjectiveScoreGt() != null) {
|
|
|
- sql.append(" and s.subjective_score>"+query.getSubjectiveScoreGt());
|
|
|
+ sql.append(" and s.subjective_score>" + query.getSubjectiveScoreGt());
|
|
|
} else if (query.getSubjectiveScoreLt() != null) {
|
|
|
- sql.append(" and s.subjective_score<"+query.getSubjectiveScoreLt());
|
|
|
+ sql.append(" and s.subjective_score<" + query.getSubjectiveScoreLt());
|
|
|
}
|
|
|
if (query.getUpload() != null) {
|
|
|
- sql.append(" and s.is_upload="+(query.getUpload()?1:0));
|
|
|
+ sql.append(" and s.is_upload=" + (query.getUpload() ? 1 : 0));
|
|
|
}
|
|
|
if (query.getInspected() != null) {
|
|
|
- sql.append(" and s.inspected="+(query.getInspected()?1:0));
|
|
|
+ sql.append(" and s.inspected=" + (query.getInspected() ? 1 : 0));
|
|
|
}
|
|
|
if (query.getAbsent() != null) {
|
|
|
if (query.getAbsent()) {// 缺考=缺考+ 未上传
|
|
|
- sql.append(" and (s.is_absent=1 or s.is_upload=0)");
|
|
|
+ sql.append(" and (s.is_absent=1 or s.is_upload=0)");
|
|
|
} else {
|
|
|
- sql.append(" and s.is_absent="+(query.getAbsent()?1:0));
|
|
|
+ sql.append(" and s.is_absent=" + (query.getAbsent() ? 1 : 0));
|
|
|
sql.append(" and s.is_upload=1");
|
|
|
}
|
|
|
}
|
|
|
if (query.getBreach() != null) {
|
|
|
- sql.append(" and s.is_breach="+(query.getBreach()?1:0));
|
|
|
+ sql.append(" and s.is_breach=" + (query.getBreach() ? 1 : 0));
|
|
|
}
|
|
|
if (query.getException() != null) {
|
|
|
- sql.append(" and s.is_exception="+(query.getException()?1:0));
|
|
|
+ sql.append(" and s.is_exception=" + (query.getException() ? 1 : 0));
|
|
|
}
|
|
|
if (query.getManualAbsent() != null) {
|
|
|
- sql.append(" and s.is_manual_absent="+(query.getManualAbsent()?1:0));
|
|
|
+ sql.append(" and s.is_manual_absent=" + (query.getManualAbsent() ? 1 : 0));
|
|
|
}
|
|
|
if (query.getUploadTimeNotNull() != null) {
|
|
|
- sql.append(" and s.upload_time is not null");
|
|
|
+ sql.append(" and s.upload_time is not null");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getSubjectCodeIn())) {
|
|
|
- sql.append(" and s.subject_code in('"+StringUtils.join(query.getSubjectCodeIn().split(","),"','")+"')");
|
|
|
+ sql.append(" and s.subject_code in('" + StringUtils.join(query.getSubjectCodeIn().split(","), "','") + "')");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getCampusNameIn())) {
|
|
|
- sql.append(" and s.campus_name in('"+StringUtils.join(query.getCampusNameIn().split(","),"','")+"')");
|
|
|
+ sql.append(" and s.campus_name in('" + StringUtils.join(query.getCampusNameIn().split(","), "','") + "')");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getExamSiteIn())) {
|
|
|
- sql.append(" and s.exam_site in('"+StringUtils.join(query.getExamSiteIn().split(","),"','")+"')");
|
|
|
+ sql.append(" and s.exam_site in('" + StringUtils.join(query.getExamSiteIn().split(","), "','") + "')");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getSubjectCodeNotIn())) {
|
|
|
- sql.append(" and s.subject_code not in('"+StringUtils.join(query.getSubjectCodeNotIn().split(","),"','")+"')");
|
|
|
+ sql.append(" and s.subject_code not in('" + StringUtils.join(query.getSubjectCodeNotIn().split(","), "','")
|
|
|
+ + "')");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getCampusNameNotIn())) {
|
|
|
- sql.append(" and s.campus_name not in('"+StringUtils.join(query.getCampusNameNotIn().split(","),"','")+"')");
|
|
|
+ sql.append(" and s.campus_name not in('" + StringUtils.join(query.getCampusNameNotIn().split(","), "','")
|
|
|
+ + "')");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getExamSiteNotIn())) {
|
|
|
- sql.append(" and s.exam_site not in('"+StringUtils.join(query.getExamSiteNotIn().split(","),"','")+"')");
|
|
|
+ sql.append(" and s.exam_site not in('" + StringUtils.join(query.getExamSiteNotIn().split(","), "','")
|
|
|
+ + "')");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getPaperType())) {
|
|
|
- sql.append(" and s.paper_type='"+query.getPaperType()+"'");
|
|
|
+ sql.append(" and s.paper_type='" + query.getPaperType() + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getCollege())) {
|
|
|
- sql.append(" and s.college='"+query.getCollege()+"'");
|
|
|
+ sql.append(" and s.college='" + query.getCollege() + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getClassName())) {
|
|
|
- sql.append(" and s.class_name='"+query.getClassName()+"'");
|
|
|
+ sql.append(" and s.class_name='" + query.getClassName() + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getTeacher())) {
|
|
|
- sql.append(" and s.teacher='"+query.getTeacher()+"'");
|
|
|
+ sql.append(" and s.teacher='" + query.getTeacher() + "'");
|
|
|
}
|
|
|
if (query.getInspectorId() != null) {
|
|
|
- sql.append(" and s.inspector_id="+query.getTeacher());
|
|
|
+ sql.append(" and s.inspector_id=" + query.getTeacher());
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getExamSite())) {
|
|
|
- sql.append(" and s.exam_site='"+query.getExamSite()+"'");
|
|
|
+ sql.append(" and s.exam_site='" + query.getExamSite() + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(query.getExamRoom())) {
|
|
|
- sql.append(" and s.exam_room='"+query.getExamRoom()+"'");
|
|
|
+ sql.append(" and s.exam_room='" + query.getExamRoom() + "'");
|
|
|
}
|
|
|
if (query.getSheetCount() != null) {
|
|
|
- sql.append(" and s.sheet_count="+query.getSheetCount());
|
|
|
+ sql.append(" and s.sheet_count=" + query.getSheetCount());
|
|
|
}
|
|
|
- if(Role.SCHOOL_VIEWER.equals(query.getRole())) {
|
|
|
- sql.append(" and exists (select 1 from eb_user_student us where us.user_id="+query.getUserId()+" and s.exam_number=us.exam_number)");
|
|
|
+ if (Role.SCHOOL_VIEWER.equals(query.getRole())) {
|
|
|
+ sql.append(" and exists (select 1 from eb_user_student us where us.user_id=" + query.getUserId()
|
|
|
+ + " and s.exam_number=us.exam_number)");
|
|
|
}
|
|
|
- return sql.toString();
|
|
|
- }
|
|
|
+ return sql.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public boolean updateTrial(Integer studentId, boolean trial) {
|
|
|
+ return studentDao.updateTrial(studentId, trial) > 0;
|
|
|
+ }
|
|
|
}
|