Prechádzať zdrojové kódy

Merge branch 'zicong/updateApi' into 'master'

Add api getWorkers



See merge request !15

liuzicong 8 rokov pred
rodič
commit
b7b32ab857

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

@@ -13,6 +13,7 @@ public class UrlConstants {
     public static final String API_WORKER = "/api/worker/";
     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_MANAGER_OR_API_ADMIN = "/api/{manager|admin}/";
 
     public static final String HOSTNAME = "http://www.mooctest.net/";

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

@@ -3,6 +3,8 @@ package cn.iselab.mooctest.site.service.application;
 import cn.iselab.mooctest.site.models.Task;
 import cn.iselab.mooctest.site.models.Worker;
 
+import java.util.List;
+
 /**
  * Created by Liu on 2017/3/21.
  */
@@ -57,4 +59,8 @@ public interface ApiService {
     Task getTask(Long taskId);
 
     String getManagerJson(Task task);
+
+    List<Worker> getWorkers(String workerList);
+
+    String getWorkersJson(List<Worker> worker);
 }

+ 16 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/application/WechatService.java

@@ -0,0 +1,16 @@
+package cn.iselab.mooctest.site.service.application;
+
+/**
+ * Created by Liu on 2017/3/31.
+ */
+public interface WechatService {
+    String checkAccount(String account, String password) throws Exception;
+
+    String getTaskInfo(String account);
+
+    String getFinishedTaskInfo(String account);
+
+    String getGroupList(String account);
+
+    String joinGroup(String account, Long groupId, String managerName);
+}

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

@@ -635,6 +635,26 @@ public class ApiServiceImpl implements ApiService {
         return result.toString();
     }
 
+    @Override
+    public List<Worker> getWorkers(String workers) {
+        List<Worker> result = new ArrayList<Worker>();
+        String[] workerIdArr = workers.split(",");
+        for (String workerId : workerIdArr){
+            result.add(workerDao.findOne(Long.parseLong(workerId)));
+        }
+        return result;
+    }
+
+    @Override
+    public String getWorkersJson(List<Worker> workers) {
+        JSONArray result = new JSONArray();
+        for (Worker worker : workers){
+            result.put((worker == null) ? worker : worker.getName());
+        }
+
+        return result.toString();
+    }
+
     private boolean groupMemberExceeded(Group group){
         return (group2WorkerDao.findByGroupId(group.getId()).size() >= managerDao.findOne(group.getManagerId()).getGroupSize());
     }

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

@@ -0,0 +1,168 @@
+package cn.iselab.mooctest.site.service.application.impl;
+
+import cn.iselab.mooctest.site.common.constant.MailConstants;
+import cn.iselab.mooctest.site.dao.*;
+import cn.iselab.mooctest.site.models.*;
+import cn.iselab.mooctest.site.service.application.WechatService;
+import cn.iselab.mooctest.site.util.data.EncryptionUtil;
+import net.sf.json.JSON;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * Created by Liu on 2017/3/31.
+ */
+@Service
+public class WechatServiceImpl implements WechatService {
+
+    @Autowired
+    private WorkerDao workerDao;
+
+    @Autowired
+    private AssignedTaskDao assignedTaskDao;
+
+    @Autowired
+    private TaskDao taskDao;
+
+    @Autowired
+    private Group2WorkerDao group2WorkerDao;
+
+    @Autowired
+    private GroupDao groupDao;
+
+    @Autowired
+    private ManagerDao managerDao;
+
+    @Override
+    public String checkAccount(String account, String password) throws Exception {
+        JSONObject result = new JSONObject();
+        String encryptedPassword = EncryptionUtil.encryptDES(password);
+        Worker worker = workerDao.findByAccount(account);
+        if (worker == null || (!worker.getPassword().equals(encryptedPassword))){
+            result.put("success", false);
+        }
+        else{
+            result.put("success", true);
+        }
+
+        return result.toString();
+    }
+
+    @Override
+    public String getTaskInfo(String account) {
+        JSONArray result = new JSONArray();
+
+        Worker worker = workerDao.findByAccount(account);
+        if (worker == null){
+            return null;
+        }
+        List<AssignedTask> assignedTaskList = assignedTaskDao.findByWorkerId(worker.getId());
+
+        for (AssignedTask assignedTask : assignedTaskList){
+            Task task = taskDao.findOne(assignedTask.getTaskId());
+
+            Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
+            if (task.getEndTime().after(currentTimestamp)){
+                JSONObject taskObj = new JSONObject();
+                taskObj.put("id", task.getId());
+                taskObj.put("taskName", task.getName());
+                taskObj.put("workerId", worker.getId());
+                taskObj.put("taskId", task.getId());
+                try {
+                    taskObj.put("password", EncryptionUtil.encryptDES(worker.getId() + "_" + task.getId()));
+                } catch (Exception e) {
+//                e.printStackTrace();
+                    return null;
+                }
+                result.put(taskObj);
+            }
+        }
+        return result.toString();
+    }
+
+    @Override
+    public String getFinishedTaskInfo(String account) {
+        JSONArray result = new JSONArray();
+
+        Worker worker = workerDao.findByAccount(account);
+        if (worker == null){
+            return null;
+        }
+        List<AssignedTask> assignedTaskList = assignedTaskDao.findByWorkerId(worker.getId());
+
+        for (AssignedTask assignedTask : assignedTaskList){
+            Task task = taskDao.findOne(assignedTask.getTaskId());
+
+            Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
+            if (task.getEndTime().before(currentTimestamp)){
+                JSONObject taskObj = new JSONObject();
+                taskObj.put("id", task.getId());
+                taskObj.put("taskName", task.getName());
+                taskObj.put("score", assignedTask.getScore());
+
+                result.put(taskObj);
+            }
+        }
+        return result.toString();
+    }
+
+    @Override
+    public String getGroupList(String account) {
+       JSONArray result = new JSONArray();
+
+        Worker worker = workerDao.findByAccount(account);
+        if (worker == null){
+            return null;
+        }
+        List<Group2Worker> group2Workers = group2WorkerDao.findByWorkerId(worker.getId());
+
+        for (Group2Worker group2Worker : group2Workers){
+            Group group = groupDao.findOne(group2Worker.getGroupId());
+
+            JSONObject groupObj = new JSONObject();
+            groupObj.put("id", group.getId());
+            groupObj.put("groupName", group.getName());
+            Manager manager = managerDao.findOne(group.getManagerId());
+            groupObj.put("managerName", manager.getName());
+
+            result.put(groupObj);
+        }
+
+       return result.toString();
+    }
+
+    @Override
+    public String joinGroup(String account, Long groupId, String managerName) {
+        JSONObject result = new JSONObject();
+        Worker worker = workerDao.findByAccount(account);
+        Group  group = groupDao.findOne(groupId);
+        if (worker == null || group == null){
+            result.put("success", false);
+            result.put("message", "group or worker not found");
+        }
+        else{
+            Manager manager = managerDao.findOne(group.getManagerId());
+            if (!manager.getName().equals(managerName)){
+                result.put("success", false);
+                result.put("message", "manager name mismatch");
+            }
+            else{
+                // Join group
+                Group2Worker group2Worker = new Group2Worker();
+                group2Worker.setGroupId(group.getId());
+                group2Worker.setWorkerId(worker.getId());
+                group2Worker.setRecordCreateTime(new Timestamp(System.currentTimeMillis()));
+                group2WorkerDao.save(group2Worker);
+
+                result.put("success", true);
+            }
+        }
+        return result.toString();
+    }
+
+}

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

@@ -81,6 +81,11 @@ public class ApiController extends BaseController {
         return apiLogic.getManagers(request);
     }
 
+
+
+    @RequestMapping(value = UrlConstants.API_INTERNAL + "getWorkers", method = RequestMethod.GET)
+    public String getWorker(HttpServletRequest request){ return apiLogic.getWorkers(request);}
+
     /**
      *
      * POST methods

+ 62 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/WechatController.java

@@ -0,0 +1,62 @@
+package cn.iselab.mooctest.site.web.ctrl;
+
+import cn.iselab.mooctest.site.common.constant.UrlConstants;
+import cn.iselab.mooctest.site.web.data.internal.*;
+import cn.iselab.mooctest.site.web.logic.ApiLogic;
+import cn.iselab.mooctest.site.web.logic.WechatLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author sean
+ * @date 2017-03-07.
+ * REMINDER:!!
+ * This is a class to be deprecated when RPC is done
+ * Now unlike other classes, it doesn't return VO values
+ */
+
+@RestController
+public class WechatController extends BaseController {
+
+    @Autowired
+    private WechatLogic wechatLogic;
+
+
+    /**
+     *
+     * GET methods
+     *
+     */
+    @RequestMapping(value = UrlConstants.API_WECHAT + "checkAccount", method = RequestMethod.GET)
+    public String checkAccount(HttpServletRequest request) {
+        return wechatLogic.checkAccount(request);
+    }
+
+    @RequestMapping(value = UrlConstants.API_WECHAT + "getTaskInfo", method = RequestMethod.GET)
+    public String getTaskInfo(HttpServletRequest request) {
+        return wechatLogic.getTaskInfo(request);
+    }
+
+    @RequestMapping(value = UrlConstants.API_WECHAT + "getFinishedTaskInfo", method = RequestMethod.GET)
+    public String getFinishedTaskInfo(HttpServletRequest request) {
+        return wechatLogic.getFinishedTaskInfo(request);
+    }
+
+    @RequestMapping(value = UrlConstants.API_WECHAT + "getGroupList", method = RequestMethod.GET)
+    public String getGroupList(HttpServletRequest request){ return wechatLogic.getGroupList(request);}
+
+    /**
+     *
+     * POST methods
+     *
+     */
+    @RequestMapping(value = UrlConstants.API_WECHAT + "joinGroup", method = RequestMethod.POST)
+    public String joinGroup(HttpServletRequest request, @RequestBody JoinGroupWechatVO body) {
+        return wechatLogic.joinGroup(request, body);
+    }
+}

+ 35 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/internal/JoinGroupWechatVO.java

@@ -0,0 +1,35 @@
+package cn.iselab.mooctest.site.web.data.internal;
+
+/**
+ * Created by Liu on 2017/3/21.
+ */
+public class JoinGroupWechatVO{
+    private String account;
+    private String managerName;
+    private Long groupId;
+
+    public String getAccount() {
+        return account;
+    }
+
+    public void setAccount(String account) {
+        this.account = account;
+    }
+
+    public String getManagerName() {
+        return managerName;
+    }
+
+    public void setManagerName(String managerName) {
+        this.managerName = managerName;
+    }
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+}

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

@@ -47,4 +47,6 @@ public interface ApiLogic {
     String recordScores(HttpServletRequest request, RecordScoresVO body);
 
     String getManagers(HttpServletRequest request);
+
+    String getWorkers(HttpServletRequest request);
 }

+ 21 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/WechatLogic.java

@@ -0,0 +1,21 @@
+package cn.iselab.mooctest.site.web.logic;
+
+import cn.iselab.mooctest.site.web.data.internal.JoinGroupVO;
+import cn.iselab.mooctest.site.web.data.internal.JoinGroupWechatVO;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Created by Liu on 2017/3/31.
+ */
+public interface WechatLogic {
+    String checkAccount(HttpServletRequest request);
+
+    String getTaskInfo(HttpServletRequest request);
+
+    String getFinishedTaskInfo(HttpServletRequest request);
+
+    String getGroupList(HttpServletRequest request);
+
+    String joinGroup(HttpServletRequest request, JoinGroupWechatVO body);
+}

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

@@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 /**
  * Created by Liu on 2017/3/20.
@@ -323,6 +324,29 @@ public class ApiLogicImpl implements ApiLogic {
         }
         return generateResponse(statusCode, "Subsite mismatch", "{}");
     }
+    @Override
+    public String getWorkers(HttpServletRequest request) {
+        int statusCode = HTTP_OK;
+        String host = getSecretHeader(request);
+        if (host != null){
+            String message = "", result = "";
+
+            if (request.getParameter("workers") == null){
+                return missingParameterResponse;
+            }
+            String workers = request.getParameter("workers");
+            List<Worker> workerList = apiService.getWorkers(workers);
+            if (workerList == null || workerList.size() == 0){
+                message = "no such worker";
+            }
+            else{
+                result = apiService.getWorkersJson(workerList);
+            }
+
+            return generateResponse(statusCode, message, result);
+        }
+        return generateResponse(statusCode, "Subsite mismatch", "{}");
+    }
 
     /**
      * POST

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

@@ -0,0 +1,129 @@
+package cn.iselab.mooctest.site.web.logic.impl;
+
+import cn.iselab.mooctest.site.service.application.WechatService;
+import cn.iselab.mooctest.site.web.data.internal.JoinGroupVO;
+import cn.iselab.mooctest.site.web.data.internal.JoinGroupWechatVO;
+import cn.iselab.mooctest.site.web.logic.WechatLogic;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Created by Liu on 2017/3/31.
+ */
+@Service
+public class WechatLogicImpl implements WechatLogic {
+    @Autowired
+    WechatService wechatService;
+    public static final int HTTP_OK = 200;
+    private static final int HTTP_INTERNAL_ERROR = 500;
+    private static final String  missingParameterResponse = generateResponse(HTTP_OK, "Missing parameter", "{}");
+
+
+    private static String generateResponse(int status, String message, String data){
+        JSONObject response = new JSONObject();
+        response.put("status" , status);
+        response.put("message", message);
+        if (data == null || data.length() == 0){
+            data = "{}";
+        }
+        response.put("data", data);
+
+        return response.toString();
+    }
+
+    @Override
+    public String checkAccount(HttpServletRequest request) {
+        int statusCode = HTTP_OK;
+
+        if (request.getParameter("account") == null || request.getParameter("password") == null){
+            return missingParameterResponse;
+        }
+
+        String account = request.getParameter("account");
+        String password = request.getParameter("password");
+
+        String result = null;
+        try {
+            result = wechatService.checkAccount(account, password);
+        } catch (Exception e) {
+//            e.printStackTrace();
+            return generateResponse(HTTP_INTERNAL_ERROR, "Decryption failed", "{}");
+        }
+
+        return generateResponse(statusCode, "", result);
+    }
+
+    @Override
+    public String getTaskInfo(HttpServletRequest request) {
+        int statusCode = HTTP_OK;
+
+        if (request.getParameter("account") == null){
+            return missingParameterResponse;
+        }
+
+        String account = request.getParameter("account");
+
+        String result = wechatService.getTaskInfo(account);
+        if (result == null){
+            return generateResponse(statusCode, "worker not found or encryption failed", "{}");
+        }
+
+        return generateResponse(statusCode, "", result);
+    }
+
+    @Override
+    public String getFinishedTaskInfo(HttpServletRequest request) {
+        int statusCode = HTTP_OK;
+
+        if (request.getParameter("account") == null){
+            return missingParameterResponse;
+        }
+
+        String account = request.getParameter("account");
+
+        String result = wechatService.getFinishedTaskInfo(account);
+        if (result == null){
+            return generateResponse(statusCode, "worker not found or encryption failed", "{}");
+        }
+
+        return generateResponse(statusCode, "", result);
+    }
+
+    @Override
+    public String getGroupList(HttpServletRequest request) {
+        int statusCode = HTTP_OK;
+
+        if (request.getParameter("account") == null){
+            return missingParameterResponse;
+        }
+
+        String account = request.getParameter("account");
+
+        String result = wechatService.getGroupList(account);
+        if (result == null){
+            return generateResponse(statusCode, "worker not found", "{}");
+        }
+
+        return generateResponse(statusCode, "", result);
+    }
+
+    @Override
+    public String joinGroup(HttpServletRequest request, JoinGroupWechatVO body) {
+        if (body.getAccount() == null || body.getGroupId() == null || body.getManagerName() == null){
+            return missingParameterResponse;
+        }
+        String account = body.getAccount();
+        Long groupId = body.getGroupId();
+        String managerName = body.getManagerName();
+
+        String result = wechatService.joinGroup(account, groupId, managerName);
+        if (result == null){
+            return generateResponse(HTTP_OK, "worker not found", "{}");
+        }
+
+        return result;
+    }
+}