Bladeren bron

ADD: add api for clients /api/client/

Zicong Liu 8 jaren geleden
bovenliggende
commit
38fc2252e1

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/UrlConstants.java

@@ -14,7 +14,7 @@ public class UrlConstants {
     public static final String API_ADMIN = "/api/admin/";
     public static final String API_INTERNAL = "/api/internal/";
     public static final String API_WECHAT = "/api/wechat/";
+    public static final String API_CLIENT = "/api/client/";
 
     public static final String HOSTNAME = "http://mooctest.net/";
-
 }

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/application/ApiService.java

@@ -63,4 +63,8 @@ public interface ApiService {
     List<Worker> getWorkers(String workerList);
 
     String getWorkersJson(List<Worker> worker);
+
+    String loginClient(String workerStr);
+
+    String getCaseList(String workerStr);
 }

+ 188 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/application/impl/ApiServiceImpl.java

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

+ 11 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/ApiController.java

@@ -130,4 +130,15 @@ public class ApiController extends BaseController {
         return apiLogic.verifyApp(request, body);
     }
 
+
+    /*  --------------      Client      ---------------- */
+    @RequestMapping(value = UrlConstants.API_CLIENT + "login", method = RequestMethod.GET)
+    public String loginClient(HttpServletRequest request) {
+        return apiLogic.login(request);
+    }
+
+    @RequestMapping(value = UrlConstants.API_CLIENT + "getCaseList", method = RequestMethod.GET)
+    public String getCaseListClient(HttpServletRequest request) {
+        return apiLogic.getCaseList(request);
+    }
 }

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/ApiLogic.java

@@ -49,4 +49,8 @@ public interface ApiLogic {
     String getManagers(HttpServletRequest request);
 
     String getWorkers(HttpServletRequest request);
+
+    String getCaseList(HttpServletRequest request);
+
+    String login(HttpServletRequest request);
 }

+ 30 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/ApiLogicImpl.java

@@ -348,6 +348,36 @@ public class ApiLogicImpl implements ApiLogic {
         return generateResponse(statusCode, "Subsite mismatch", "{}");
     }
 
+    @Override
+    public String getCaseList(HttpServletRequest request) {
+        if (request.getParameter("workerStr") == null){
+            return missingParameterResponse;
+        }
+        String workerStr = request.getParameter("workerStr");
+
+        // get download json
+        String caseResult = apiService.getCaseList(workerStr);
+
+        String result = generateResponse(HTTP_OK, "", caseResult);
+
+        return result;
+    }
+
+    @Override
+    public String login(HttpServletRequest request) {
+        if (request.getParameter("workerStr") == null){
+            return missingParameterResponse;
+        }
+        String workerStr = request.getParameter("workerStr");
+
+        // login the system
+        String loginResult = apiService.loginClient(workerStr);
+
+        String result = generateResponse(HTTP_OK, "", loginResult);
+
+        return result;
+    }
+
     /**
      * POST
      */