wangwei 5 năm trước cách đây
mục cha
commit
9473888029

+ 11 - 0
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/ExamService.java

@@ -48,6 +48,17 @@ public interface ExamService {
 	 */
 	String getExamOrgProperty(Long examId, Long orgId, String key);
 
+	/**
+	 * 查询考试学生属性
+	 *
+	 * @author WANGWEI
+	 * @param examId
+	 * @param studentId
+	 * @param key
+	 * @return
+	 */
+	String getExamStudentProperty(Long examId, Long studentId, String key);
+
 	/**
 	 * 导入学习中心设置
 	 *

+ 43 - 0
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/cache/ExamStudentPropertyCache.java

@@ -0,0 +1,43 @@
+package cn.com.qmth.examcloud.core.examwork.service.cache;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.com.qmth.examcloud.core.examwork.service.ExamService;
+import cn.com.qmth.examcloud.support.cache.bean.ExamStudentPropertyCacheBean;
+import cn.com.qmth.examcloud.web.cache.RandomObjectRedisCache;
+
+@Service
+public class ExamStudentPropertyCache extends RandomObjectRedisCache<ExamStudentPropertyCacheBean> {
+
+	@Autowired
+	private ExamService examService;
+
+	@Override
+	public ExamStudentPropertyCacheBean loadFromResource(Object... keys) {
+		Long examId = (Long) keys[0];
+		Long studentId = (Long) keys[1];
+		String key = (String) keys[2];
+
+		String value = examService.getExamStudentProperty(examId, studentId, key);
+
+		ExamStudentPropertyCacheBean b = new ExamStudentPropertyCacheBean();
+		b.setExamId(examId);
+		b.setStudentId(studentId);
+		b.setKey(key);
+		b.setValue(value);
+		return b;
+	}
+
+	@Override
+	protected String getKeyPrefix() {
+		return "E_EXAM_STUDENT_PROP:";
+	}
+
+	@Override
+	protected int getTimeout() {
+		// 2分钟
+		return 60 * 2;
+	}
+
+}

+ 78 - 0
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/cache/ExamStudentSettingsCache.java

@@ -0,0 +1,78 @@
+package cn.com.qmth.examcloud.core.examwork.service.cache;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.com.qmth.examcloud.commons.exception.StatusException;
+import cn.com.qmth.examcloud.core.examwork.dao.ExamRepo;
+import cn.com.qmth.examcloud.core.examwork.dao.ExamSpecialSettingsRepo;
+import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamEntity;
+import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamSpecialSettingsEntity;
+import cn.com.qmth.examcloud.support.cache.bean.ExamStudentSettingsCacheBean;
+import cn.com.qmth.examcloud.web.cache.RandomObjectRedisCache;
+import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
+
+@Service
+public class ExamStudentSettingsCache extends RandomObjectRedisCache<ExamStudentSettingsCacheBean> {
+
+	@Autowired
+	ExamRepo examRepo;
+
+	@Autowired
+	ExamSpecialSettingsRepo examSpecialSettingsRepo;
+
+	@Override
+	public ExamStudentSettingsCacheBean loadFromResource(Object... keys) {
+		Long examId = (Long) keys[0];
+		Long studentId = (Long) keys[1];
+
+		ExamEntity exam = GlobalHelper.getEntity(examRepo, examId, ExamEntity.class);
+
+		if (null == exam) {
+			throw new StatusException("002005", "考试不存在");
+		}
+
+		ExamStudentSettingsCacheBean bean = new ExamStudentSettingsCacheBean();
+
+		bean.setId(exam.getId());
+		bean.setBeginTime(exam.getBeginTime());
+		bean.setDuration(exam.getDuration());
+		bean.setEnable(exam.getEnable());
+		bean.setEndTime(exam.getEndTime());
+		bean.setExamTimes(exam.getExamTimes());
+		bean.setExamType(exam.getExamType().name());
+		bean.setName(exam.getName());
+		bean.setCode(exam.getCode());
+		bean.setRemark(exam.getRemark());
+		bean.setRootOrgId(exam.getRootOrgId());
+		bean.setExamLimit(exam.getExamLimit());
+
+		ExamSpecialSettingsEntity examOrgEntity = examSpecialSettingsRepo
+				.findByExamIdAndStudentIdAndOrgIdIsNullAndCourseIdIsNull(exam.getId(), studentId);
+		if (null != examOrgEntity) {
+			if (null != examOrgEntity.getBeginTime()) {
+				bean.setBeginTime(examOrgEntity.getBeginTime());
+			}
+			if (null != examOrgEntity.getEndTime()) {
+				bean.setEndTime(examOrgEntity.getEndTime());
+			}
+			if (null != examOrgEntity.getExamLimit()) {
+				bean.setExamLimit(examOrgEntity.getExamLimit());
+			}
+		}
+
+		return bean;
+	}
+
+	@Override
+	protected String getKeyPrefix() {
+		return "E_EXAM_STUDENT_SETTINGS:";
+	}
+
+	@Override
+	protected int getTimeout() {
+		// 2分钟
+		return 60 * 2;
+	}
+
+}

+ 18 - 0
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/impl/ExamServiceImpl.java

@@ -620,6 +620,24 @@ public class ExamServiceImpl implements ExamService {
 		return examPropertyEntity.getValue();
 	}
 
+	@Override
+	public String getExamStudentProperty(Long examId, Long studentId, String key) {
+		DynamicEnumManager manager = ExamProperty.getDynamicEnumManager();
+		DynamicEnum de = manager.getByName(key);
+
+		if (null != studentId) {
+			// 待实现
+		}
+
+		ExamPropertyEntity examPropertyEntity = examPropertyRepo.findByExamIdAndKeyId(examId,
+				de.getId());
+		if (null == examPropertyEntity) {
+			return null;
+		}
+
+		return examPropertyEntity.getValue();
+	}
+
 	@Override
 	public List<Map<String, Object>> importExamOrgSettings(Long examId, File file) {