|
@@ -13,9 +13,12 @@ import cn.com.qmth.stmms.biz.utils.OriginTag;
|
|
|
import cn.com.qmth.stmms.biz.utils.PictureConfigTransform;
|
|
|
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;
|
|
|
+import org.hibernate.transform.Transformers;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
import org.springframework.data.domain.Sort;
|
|
@@ -26,11 +29,13 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
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.*;
|
|
|
import java.util.Map.Entry;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implements ExamStudentService {
|
|
@@ -1298,4 +1303,202 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
|
|
|
public void cancelInspect(Integer studentId) {
|
|
|
studentDao.cancelInspect(studentId);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ @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 (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 ");
|
|
|
+ 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()+"'");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getSubjectCode())) {
|
|
|
+ sql.append(" and s.subject_code='"+query.getSubjectCode()+"'");
|
|
|
+
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getCampusName())) {
|
|
|
+ sql.append(" and s.campus_name='"+query.getCampusName()+"'");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getName())) {
|
|
|
+ sql.append(" and s.name like '"+query.getName()+"%'");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getBatchCode())) {
|
|
|
+ sql.append(" and s.batch_code='"+query.getBatchCode()+"'");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getPackageCode())) {
|
|
|
+ sql.append(" and s.package_code='"+query.getPackageCode()+"'");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getSubjectLevel())) {
|
|
|
+ sql.append(" and s.subject_level='"+query.getSubjectLevel()+"'");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getSubjectCategory())) {
|
|
|
+ sql.append(" and s.subject_category='"+query.getSubjectCategory()+"'");
|
|
|
+ }
|
|
|
+ if (query.getObjectiveScore() != null) {
|
|
|
+ sql.append(" and s.objective_score="+query.getObjectiveScore());
|
|
|
+ } else if (query.getObjectiveScoreGt() != null) {
|
|
|
+ sql.append(" and s.objective_score>"+query.getObjectiveScoreGt());
|
|
|
+ } else if (query.getObjectiveScoreLt() != null) {
|
|
|
+ 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,"','")+"')");
|
|
|
+ }
|
|
|
+ if (query.getSubjectiveScore() != null) {
|
|
|
+ sql.append(" and s.subjective_score="+query.getSubjectiveScore());
|
|
|
+ } else if (query.getSubjectiveScoreGt() != null) {
|
|
|
+ sql.append(" and s.subjective_score>"+query.getSubjectiveScoreGt());
|
|
|
+ } else if (query.getSubjectiveScoreLt() != null) {
|
|
|
+ sql.append(" and s.subjective_score<"+query.getSubjectiveScoreLt());
|
|
|
+ }
|
|
|
+ if (query.getUpload() != null) {
|
|
|
+ sql.append(" and s.is_upload="+(query.getUpload()?1:0));
|
|
|
+ }
|
|
|
+ if (query.getInspected() != null) {
|
|
|
+ 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)");
|
|
|
+ } else {
|
|
|
+ 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));
|
|
|
+ }
|
|
|
+ if (query.getException() != null) {
|
|
|
+ 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));
|
|
|
+ }
|
|
|
+ if (query.getUploadTimeNotNull() != 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(","),"','")+"')");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getCampusNameIn())) {
|
|
|
+ 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(","),"','")+"')");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getSubjectCodeNotIn())) {
|
|
|
+ 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(","),"','")+"')");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getExamSiteNotIn())) {
|
|
|
+ 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()+"'");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getCollege())) {
|
|
|
+ sql.append(" and s.college='"+query.getCollege()+"'");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getClassName())) {
|
|
|
+ sql.append(" and s.class_name='"+query.getClassName()+"'");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getTeacher())) {
|
|
|
+ sql.append(" and s.teacher='"+query.getTeacher()+"'");
|
|
|
+ }
|
|
|
+ if (query.getInspectorId() != null) {
|
|
|
+ sql.append(" and s.inspector_id="+query.getTeacher());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getExamSite())) {
|
|
|
+ sql.append(" and s.exam_site='"+query.getExamSite()+"'");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(query.getExamRoom())) {
|
|
|
+ sql.append(" and s.exam_room='"+query.getExamRoom()+"'");
|
|
|
+ }
|
|
|
+ if (query.getSheetCount() != null) {
|
|
|
+ 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)");
|
|
|
+ }
|
|
|
+ return sql.toString();
|
|
|
+ }
|
|
|
}
|