|
|
@@ -6,6 +6,7 @@ import cn.iselab.mooctest.site.common.constant.SubsiteConstants;
|
|
|
import cn.iselab.mooctest.site.dao.*;
|
|
|
import cn.iselab.mooctest.site.models.*;
|
|
|
import cn.iselab.mooctest.site.service.application.ApiService;
|
|
|
+import cn.iselab.mooctest.site.util.data.EncryptionUtil;
|
|
|
import org.json.JSONArray;
|
|
|
import org.json.JSONObject;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -666,6 +667,193 @@ public class ApiServiceImpl implements ApiService {
|
|
|
return result.toString();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public String loginClient(String workerStr) {
|
|
|
+ Long taskId = null, workerId;
|
|
|
+ AssignedTask assignedTask = null;
|
|
|
+ // decrypt workerStr to get taskId and classMemId
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ String decryptedStr = EncryptionUtil.decryptDES(workerStr.trim());
|
|
|
+ String[] infos = decryptedStr.split("_");
|
|
|
+ taskId = Long.valueOf(infos[0]);
|
|
|
+ workerId = Long.valueOf(infos[1]);
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ jsonObject.put("login_success", 0);
|
|
|
+ jsonObject.put("task_time_status", 0);
|
|
|
+ jsonObject.put("task_name", "");
|
|
|
+ jsonObject.put("task_begin_time", "");
|
|
|
+ jsonObject.put("task_end_time", "");
|
|
|
+ jsonObject.put("task_error_message", "考试密码错误(是否多输入了空格?)");
|
|
|
+ return jsonObject.toString();
|
|
|
+ }
|
|
|
+ boolean taskFound = false;
|
|
|
+
|
|
|
+ try {
|
|
|
+ List<AssignedTask> assignedTasks = assignedTaskDao.findByTaskIdAndWorkerId(taskId, workerId);
|
|
|
+ if (assignedTasks != null && assignedTasks.size() > 0){
|
|
|
+ taskFound = true;
|
|
|
+ assignedTask = assignedTasks.get(0);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ if (!taskFound || assignedTask == null){
|
|
|
+ jsonObject.put("login_success", 0);
|
|
|
+ jsonObject.put("task_time_status", 0);
|
|
|
+ jsonObject.put("task_name", "");
|
|
|
+ jsonObject.put("task_begin_time", "");
|
|
|
+ jsonObject.put("task_end_time", "");
|
|
|
+ jsonObject.put("task_error_message", "没有找到您的考试");
|
|
|
+ return jsonObject.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ jsonObject.put("login_success", 1);
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 查询该学生即将进行或正在进行的考试
|
|
|
+ Task task = taskDao.findOne(taskId);
|
|
|
+ Timestamp currentTime = new Timestamp(System.currentTimeMillis());
|
|
|
+ Timestamp taskBeginTime = task.getBeginTime();
|
|
|
+ Timestamp taskEndTime = task.getEndTime();
|
|
|
+
|
|
|
+ Timestamp loginTime = assignedTask.getLoginTime();
|
|
|
+
|
|
|
+ Task assiTask = taskDao.findOne(assignedTask.getTaskId());
|
|
|
+ Timestamp workerEndTime = assiTask.getEndTime();
|
|
|
+
|
|
|
+ if (currentTime.before(taskBeginTime)) {
|
|
|
+ jsonObject.put("task_time_status", 0);
|
|
|
+ jsonObject.put("task_name", task.getName());
|
|
|
+ jsonObject.put("task_begin_time", task.getBeginTime()
|
|
|
+ .toString());
|
|
|
+ jsonObject.put("task_end_time", task.getEndTime()
|
|
|
+ .toString());
|
|
|
+ } else if (currentTime.before(taskEndTime)
|
|
|
+ && (workerEndTime == null || currentTime.before(workerEndTime))
|
|
|
+ && currentTime.after(taskBeginTime)) {
|
|
|
+
|
|
|
+ if (loginTime == null) {
|
|
|
+ loginTime = currentTime;
|
|
|
+ // update loginTime in table worker_paper_xx
|
|
|
+ assignedTask.setLoginTime(loginTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ jsonObject.put("task_time_status", 1);
|
|
|
+
|
|
|
+ // 考试名
|
|
|
+ jsonObject.put("task_name", task.getName());
|
|
|
+
|
|
|
+ // 考试开始时间
|
|
|
+ jsonObject.put("task_begin_time", task.getBeginTime()
|
|
|
+ .toString());
|
|
|
+
|
|
|
+ // 考试结束时间
|
|
|
+ jsonObject.put("task_end_time", task.getEndTime()
|
|
|
+ .toString());
|
|
|
+ } else {
|
|
|
+ jsonObject.put("task_time_status", 2);
|
|
|
+ jsonObject.put("task_name", task.getName());
|
|
|
+ jsonObject.put("task_begin_time", task.getBeginTime()
|
|
|
+ .toString());
|
|
|
+ jsonObject.put("task_end_time", task.getEndTime()
|
|
|
+ .toString());
|
|
|
+ }
|
|
|
+ // pass common values
|
|
|
+ jsonObject.put("worker_id", workerId);
|
|
|
+ jsonObject.put("task_id", taskId);
|
|
|
+ Worker worker = workerDao.findOne(workerId);
|
|
|
+ String account = (worker.getEmail() == null || worker.getEmail().length() == 0) ? worker.getMobile() : worker.getEmail();
|
|
|
+ jsonObject.put("mooc-worker-token", EncryptionUtil.encryptDES(account));
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ jsonObject.put("login_success", 0);
|
|
|
+ jsonObject.put("task_time_status", 0);
|
|
|
+ jsonObject.put("task_name", "");
|
|
|
+ jsonObject.put("task_begin_time", "");
|
|
|
+ jsonObject.put("task_end_time", "");
|
|
|
+ jsonObject.put("task_error_message", "服务器提了一个问题哦");
|
|
|
+ return jsonObject.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ return jsonObject.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getCaseList(String workerStr) {
|
|
|
+ // decrypt workerStr to get taskId and classMemId
|
|
|
+ String decryptedStr = null;
|
|
|
+ try {
|
|
|
+ decryptedStr = EncryptionUtil.decryptDES(workerStr.trim());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ if (decryptedStr == null){
|
|
|
+ return "{message: \"Decryption Error!\"}";
|
|
|
+ }
|
|
|
+ String[] infos = decryptedStr.trim().split("_");
|
|
|
+ long taskId = Long.valueOf(infos[0]);
|
|
|
+ long workerId = Long.valueOf(infos[1]);
|
|
|
+
|
|
|
+ List<AssignedTask> assignedTasks = assignedTaskDao.findByTaskIdAndWorkerId(taskId, workerId);
|
|
|
+ if (assignedTasks == null || assignedTasks.size() == 0){
|
|
|
+ return "{message: \"No such AssignedTask\"}";
|
|
|
+ }
|
|
|
+ AssignedTask assignedTask = assignedTasks.get(0);
|
|
|
+
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+
|
|
|
+ Task task = taskDao.findOne(taskId);
|
|
|
+ Timestamp currentTime = new Timestamp(System.currentTimeMillis());
|
|
|
+ Timestamp taskBeginTime = task.getBeginTime();
|
|
|
+ Timestamp taskEndTime = task.getEndTime();
|
|
|
+
|
|
|
+// Timestamp loginTime = assignedTask.loginTime;
|
|
|
+
|
|
|
+ Timestamp workerEndTime = taskDao.findOne(assignedTask.getTaskId()).getEndTime();
|
|
|
+
|
|
|
+ if (currentTime.before(taskBeginTime)) {
|
|
|
+ jsonObject.put("task_time_status", 0);
|
|
|
+ jsonObject.put("task_name", task.getName());
|
|
|
+ jsonObject.put("task_begin_time", task.getBeginTime()
|
|
|
+ .toString());
|
|
|
+ jsonObject.put("task_end_time", task.getEndTime().toString());
|
|
|
+ } else if (currentTime.before(taskEndTime)
|
|
|
+ && currentTime.before(workerEndTime)
|
|
|
+ && currentTime.after(taskBeginTime)) {
|
|
|
+ jsonObject.put("task_time_status", 1);
|
|
|
+
|
|
|
+ jsonObject.put("task_name", task.getName());
|
|
|
+ jsonObject.put("task_begin_time", task.getBeginTime()
|
|
|
+ .toString());
|
|
|
+ jsonObject.put("task_end_time", task.getEndTime().toString());
|
|
|
+ jsonObject.put("task_type", subsiteDao.findOne(task.getSubsiteId()).getName());
|
|
|
+
|
|
|
+ JSONArray cazeArray = new JSONArray();
|
|
|
+ // write case information into jsonObject
|
|
|
+ JSONObject casesContent = new JSONObject(assignedTask.getContent()).getJSONObject("cases");
|
|
|
+ Set<String> keySet = casesContent.keySet();
|
|
|
+ for (String key : keySet){
|
|
|
+ cazeArray.put(casesContent.get(key));
|
|
|
+ }
|
|
|
+
|
|
|
+ jsonObject.put("cases", cazeArray);
|
|
|
+ } else {
|
|
|
+ jsonObject.put("task_time_status", 2);
|
|
|
+ jsonObject.put("task_name", task.getName());
|
|
|
+ jsonObject.put("task_begin_time", task.getBeginTime()
|
|
|
+ .toString());
|
|
|
+ jsonObject.put("task_end_time", task.getEndTime().toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ return jsonObject.toString();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
private boolean groupMemberExceeded(Group group){
|
|
|
return (group2WorkerDao.findByGroupId(group.getId()).size() >= managerDao.findOne(group.getManagerId()).getGroupSize());
|
|
|
}
|