瀏覽代碼

查询员绑定考生

xiatian 1 年之前
父節點
當前提交
612b3348f2

+ 0 - 11
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/UserStudent.java

@@ -17,9 +17,6 @@ public class UserStudent implements Serializable {
     @Id
     @GeneratedValue
     private Integer id;
-    
-    @Column(name = "school_id", nullable = false)
-    private Integer schoolId;
 
     @Column(name = "user_id", nullable = false)
     private Integer userId;
@@ -55,12 +52,4 @@ public class UserStudent implements Serializable {
         this.userId = userId;
     }
 
-	public Integer getSchoolId() {
-		return schoolId;
-	}
-
-	public void setSchoolId(Integer schoolId) {
-		this.schoolId = schoolId;
-	}
-
 }

+ 10 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/ExamStudentSearchQuery.java

@@ -14,7 +14,7 @@ import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 
 public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
-	
+	private Integer userId;
 	private Role role;
     private Integer examId;
 
@@ -557,4 +557,13 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
 		this.role = role;
 	}
 
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	
 }

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java

@@ -187,5 +187,7 @@ public interface ExamStudentService {
     void scoreVerifyTag(Integer userId, Integer studentId, Boolean tag);
 
     void cancelInspect(Integer studentId);
+    
+    public ExamStudentSearchQuery findByQueryPlus(ExamStudentSearchQuery query);
 
 }

+ 203 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java

@@ -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();
+	}
 }

+ 3 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/UserStudentServiceImpl.java

@@ -38,10 +38,10 @@ public class UserStudentServiceImpl extends BaseQueryService<UserStudent> implem
 				protected int updateData(List<UserStudentVo> dataList) {
 					List<String> examNumbers=dataList.stream().map(e->e.getExamNumber()).collect(Collectors.toList());
 					StringBuilder sql = new StringBuilder();
-					sql.append(" INSERT INTO eb_user_student (`school_id`,`user_id`, `exam_number`) ");
-					sql.append(" SELECT distinct "+schoolId+","+userId+",s.exam_number from eb_exam_student s ");
+					sql.append(" INSERT INTO eb_user_student (`user_id`, `exam_number`) ");
+					sql.append(" SELECT distinct "+userId+",s.exam_number from eb_exam_student s ");
 					sql.append(" where s.school_id="+schoolId +" and s.exam_number in ('"+StringUtils.join(examNumbers,"','")+"') ");
-					sql.append(" and not exists (select 1 from eb_user_student t where t.school_id=s.school_id and t.exam_number=s.exam_number)");
+					sql.append(" and not exists (select 1 from eb_user_student t where t.user_id="+userId+" and t.exam_number=s.exam_number)");
 					Query query = entityManager.createNativeQuery(sql.toString());
 					return query.executeUpdate();
 				}

+ 5 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -107,7 +107,8 @@ public class ScoreController extends BaseExamController {
             query.setSubjectCodeIn(subjectCodeIn);
         }
         query.setRole(wu.getRole());
-        query = studentService.findByQuery(query);
+        query.setUserId(wu.getId());
+        query = studentService.findByQueryPlus(query);
         for (ExamStudent student : query.getResult()) {
             buildSheetUrl(student);
             buildPackageUrl(student);
@@ -288,7 +289,9 @@ public class ScoreController extends BaseExamController {
                 query.setSubjectCodeIn(subjectCodeIn);
                 query.setPageNumber(1);
                 query.setPageSize(Integer.MAX_VALUE);
-                query = studentService.findByQuery(query);
+                query.setRole(wu.getRole());
+                query.setUserId(wu.getId());
+                query = studentService.findByQueryPlus(query);
                 for (ExamStudent student : query.getResult()) {
                     if (!student.isUpload() || student.isBreach() || student.isAbsent()) {
                         student.setObjectiveScore(0d);

+ 1 - 3
stmms-web/src/main/webapp/sql/stmms_ft.sql

@@ -1164,12 +1164,10 @@ DROP TABLE IF EXISTS `eb_user_student`;
 CREATE TABLE `eb_user_student`
 (
     `id`           int(11)     NOT NULL AUTO_INCREMENT COMMENT '主键',
-    `school_id`      int(11)     NOT NULL COMMENT '用户ID',
     `user_id`      int(11)     NOT NULL COMMENT '用户ID',
     `exam_number` 	varchar(64)	   NOT NULL COMMENT '考生ID',
     PRIMARY KEY (`id`),
-    UNIQUE KEY `index1` (`user_id`, `exam_number`),
-    KEY `index2` (`school_id`, `exam_number`)
+    UNIQUE KEY `index1` (`user_id`, `exam_number`)
 ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4 COMMENT ='用户考生关联表';
   

+ 1 - 3
stmms-web/src/main/webapp/sql/upgrade/1.3.14.sql

@@ -104,12 +104,10 @@ DROP TABLE IF EXISTS `eb_user_student`;
 CREATE TABLE `eb_user_student`
 (
     `id`           int(11)     NOT NULL AUTO_INCREMENT COMMENT '主键',
-    `school_id`      int(11)     NOT NULL COMMENT '用户ID',
     `user_id`      int(11)     NOT NULL COMMENT '用户ID',
     `exam_number` 	varchar(64)	   NOT NULL COMMENT '考生ID',
     PRIMARY KEY (`id`),
-    UNIQUE KEY `index1` (`user_id`, `exam_number`),
-    KEY `index2` (`school_id`, `exam_number`)
+    UNIQUE KEY `index1` (`user_id`, `exam_number`)
 ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4 COMMENT ='用户考生关联表';