|
@@ -48,6 +48,7 @@ import cn.com.qmth.examcloud.core.examwork.service.ExamService;
|
|
|
import cn.com.qmth.examcloud.core.examwork.service.ExamStudentService;
|
|
|
import cn.com.qmth.examcloud.core.examwork.service.bean.ExamInfo;
|
|
|
import cn.com.qmth.examcloud.core.examwork.service.bean.ExamSpecialSettingsInfo;
|
|
|
+import cn.com.qmth.examcloud.core.examwork.service.cache.ExamPropertyCache;
|
|
|
import cn.com.qmth.examcloud.core.examwork.service.cache.ExamSettingsCache;
|
|
|
import cn.com.qmth.examcloud.support.privilege.PrivilegeDefine;
|
|
|
import cn.com.qmth.examcloud.support.privilege.PrivilegeManager;
|
|
@@ -91,6 +92,9 @@ public class ExamServiceImpl implements ExamService {
|
|
|
@Autowired
|
|
|
ExamSettingsCache examSettingsCache;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ ExamPropertyCache examPropertyCache;
|
|
|
+
|
|
|
private static final String[] EXAM_ORG_SETTINGS_EXCEL_HEADER = new String[]{"学习中心ID", "学习中心代码",
|
|
|
"学习中心名称", "是否可以考试(是/否)", "开始考试时间 yyyy-MM-dd hh:mm:ss", "结束考试时间 yyyy-MM-dd hh:mm:ss"};
|
|
|
|
|
@@ -273,6 +277,11 @@ public class ExamServiceImpl implements ExamService {
|
|
|
dataSyncCloudService.syncExam(req);
|
|
|
|
|
|
examSettingsCache.remove(saved.getId());
|
|
|
+
|
|
|
+ for (String cur : properties.keySet()) {
|
|
|
+ examPropertyCache.remove(saved.getId(), cur);
|
|
|
+ }
|
|
|
+
|
|
|
return saved;
|
|
|
}
|
|
|
|
|
@@ -309,33 +318,32 @@ public class ExamServiceImpl implements ExamService {
|
|
|
}
|
|
|
|
|
|
String beforeExamRemark = properties.get("BEFORE_EXAM_REMARK");
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
if (null != beforeExamRemark) {
|
|
|
Document doc = Jsoup.parse(beforeExamRemark);
|
|
|
Matcher m = pattern.matcher(doc.text());
|
|
|
String simpleText = m.replaceAll("").replaceAll(" ", "");
|
|
|
- if (simpleText.length() > 800) {
|
|
|
- throw new StatusException("001002", "考前说明内容不得超过800个字符");
|
|
|
- }
|
|
|
- long imgsize=getImgSizeByBase64String(beforeExamRemark);
|
|
|
- if(imgsize>150*1024) {
|
|
|
- throw new StatusException("001002", "考前说明图片总大小不得超过150KB");
|
|
|
- }
|
|
|
+ if (simpleText.length() > 800) {
|
|
|
+ throw new StatusException("001002", "考前说明内容不得超过800个字符");
|
|
|
+ }
|
|
|
+ long imgsize = getImgSizeByBase64String(beforeExamRemark);
|
|
|
+ if (imgsize > 150 * 1024) {
|
|
|
+ throw new StatusException("001002", "考前说明图片总大小不得超过150KB");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
String afterExamRemark = properties.get("AFTER_EXAM_REMARK");
|
|
|
- if (null != afterExamRemark ) {
|
|
|
+ if (null != afterExamRemark) {
|
|
|
Document doc = Jsoup.parse(afterExamRemark);
|
|
|
Matcher m = pattern.matcher(doc.text());
|
|
|
String simpleText = m.replaceAll("").replaceAll(" ", "");
|
|
|
- if (simpleText.length() > 800) {
|
|
|
- throw new StatusException("001002", "考后说明内容不得超过800个字符");
|
|
|
- }
|
|
|
- long imgsize=getImgSizeByBase64String(afterExamRemark);
|
|
|
- if(imgsize>150*1024) {
|
|
|
- throw new StatusException("001002", "考后说明图片总大小不得超过150KB");
|
|
|
- }
|
|
|
+ if (simpleText.length() > 800) {
|
|
|
+ throw new StatusException("001002", "考后说明内容不得超过800个字符");
|
|
|
+ }
|
|
|
+ long imgsize = getImgSizeByBase64String(afterExamRemark);
|
|
|
+ if (imgsize > 150 * 1024) {
|
|
|
+ throw new StatusException("001002", "考后说明图片总大小不得超过150KB");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
String cheatingRemark = properties.get("CHEATING_REMARK");
|
|
@@ -343,13 +351,13 @@ public class ExamServiceImpl implements ExamService {
|
|
|
Document doc = Jsoup.parse(cheatingRemark);
|
|
|
Matcher m = pattern.matcher(doc.text());
|
|
|
String simpleText = m.replaceAll("").replaceAll(" ", "");
|
|
|
- if (simpleText.length() > 800) {
|
|
|
- throw new StatusException("001002", "作弊说明内容不得超过800个字符");
|
|
|
- }
|
|
|
- long imgsize=getImgSizeByBase64String(cheatingRemark);
|
|
|
- if(imgsize>150*1024) {
|
|
|
- throw new StatusException("001002", "作弊说明图片总大小不得超过150KB");
|
|
|
- }
|
|
|
+ if (simpleText.length() > 800) {
|
|
|
+ throw new StatusException("001002", "作弊说明内容不得超过800个字符");
|
|
|
+ }
|
|
|
+ long imgsize = getImgSizeByBase64String(cheatingRemark);
|
|
|
+ if (imgsize > 150 * 1024) {
|
|
|
+ throw new StatusException("001002", "作弊说明图片总大小不得超过150KB");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 校验机构权限
|
|
@@ -380,31 +388,33 @@ public class ExamServiceImpl implements ExamService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @param content 内容
|
|
|
+ * @param content
|
|
|
+ * 内容
|
|
|
* @return 内容中图片文件总大小
|
|
|
*/
|
|
|
private long getImgSizeByBase64String(String content) {
|
|
|
- long size=0;
|
|
|
- if(StringUtils.isNoneEmpty(content)) {
|
|
|
+ long size = 0;
|
|
|
+ if (StringUtils.isNoneEmpty(content)) {
|
|
|
Document doc = Jsoup.parse(content);
|
|
|
- Elements imgs=doc.getElementsByTag("img");
|
|
|
- if(imgs!=null) {
|
|
|
- for(Element img:imgs) {
|
|
|
- String src=img.attr("src");
|
|
|
- if(src.startsWith("data:")) {
|
|
|
- String base64=src.split(",")[1];
|
|
|
- int equalIndex= base64.indexOf("=");
|
|
|
- if(equalIndex>0){
|
|
|
- base64=base64.substring(0, equalIndex);
|
|
|
- }
|
|
|
- long fileSize=base64.length()-(base64.length()/8)*2;
|
|
|
- size=size+fileSize;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ Elements imgs = doc.getElementsByTag("img");
|
|
|
+ if (imgs != null) {
|
|
|
+ for (Element img : imgs) {
|
|
|
+ String src = img.attr("src");
|
|
|
+ if (src.startsWith("data:")) {
|
|
|
+ String base64 = src.split(",")[1];
|
|
|
+ int equalIndex = base64.indexOf("=");
|
|
|
+ if (equalIndex > 0) {
|
|
|
+ base64 = base64.substring(0, equalIndex);
|
|
|
+ }
|
|
|
+ long fileSize = base64.length() - (base64.length() / 8) * 2;
|
|
|
+ size = size + fileSize;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
return size;
|
|
|
}
|
|
|
+
|
|
|
/*
|
|
|
* 实现
|
|
|
*
|
|
@@ -703,4 +713,18 @@ public class ExamServiceImpl implements ExamService {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public String getExamProperty(Long examId, String key) {
|
|
|
+ DynamicEnumManager manager = ExamProperty.getDynamicEnumManager();
|
|
|
+ DynamicEnum de = manager.getByName(key);
|
|
|
+
|
|
|
+ ExamPropertyEntity examPropertyEntity = examPropertyRepo.findByExamIdAndKeyId(examId,
|
|
|
+ de.getId());
|
|
|
+ if (null == examPropertyEntity) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ return examPropertyEntity.getValue();
|
|
|
+ }
|
|
|
+
|
|
|
}
|