Browse Source

impl isDoingExam

deason 6 năm trước cách đây
mục cha
commit
2ce4c78645

+ 3 - 2
src/main/java/cn/com/qmth/examcloud/app/controller/UserAuthRestController.java

@@ -8,6 +8,7 @@
 package cn.com.qmth.examcloud.app.controller;
 
 import cn.com.qmth.examcloud.app.model.LoginInfo;
+import cn.com.qmth.examcloud.app.model.LoginType;
 import cn.com.qmth.examcloud.app.model.Result;
 import cn.com.qmth.examcloud.app.model.UserInfo;
 import cn.com.qmth.examcloud.app.service.BaseInfoService;
@@ -62,14 +63,14 @@ public class UserAuthRestController {
     @RequestMapping(value = "/user/verify", method = {RequestMethod.GET, RequestMethod.POST})
     public Result<UserInfo> verifyLogin(@RequestParam String account, @RequestParam String smsCode, @RequestParam(required = false) Long rootOrgId,
                                         @RequestParam(required = false) String domain, @RequestHeader String deviceId) throws Exception {
-        LoginInfo loginInfo = new LoginInfo(account, null, "STUDENT_PHONE", rootOrgId, domain, deviceId, smsCode);
+        LoginInfo loginInfo = new LoginInfo(account, null, LoginType.STUDENT_PHONE.name(), rootOrgId, domain, deviceId, smsCode);
         Result<UserInfo> result = userAuthService.login(loginInfo);
         if (result.isSuccess() && result.getData() != null) {
             //登录成功后缓存Token信息
             UserInfo userInfo = result.getData();
             loginInfo.setUserName(userInfo.getDisplayName());
-            loginInfo.setKey(userInfo.getKey());
             loginInfo.setToken(userInfo.getToken());
+            loginInfo.setKey(userInfo.getKey());
             loginInfo.setAppToken(userInfo.getToken());
             userAuthService.cacheLoginInfo(loginInfo, userInfo.getKey());
             log.info(String.format("key:%s token:%s", userInfo.getKey(), userInfo.getToken()));

+ 4 - 0
src/main/java/cn/com/qmth/examcloud/app/model/Constants.java

@@ -51,6 +51,10 @@ public interface Constants {
     String PARAM_TRACE_ID = "TRACE_ID";
     String PARAM_CLIENT = "$spring_cloud_client";
     String PARAM_CLIENT_VALUE = "-";
+
+    String PARAM_ROOT_ORG_ID = "rootOrgId";
+    String PARAM_ACCOUNT_TYPE = "accountType";
+    String PARAM_ACCOUNT = "account";
     String PARAM_PASSWORD = "password";
 
     /* 常用的文件类型 */

+ 27 - 0
src/main/java/cn/com/qmth/examcloud/app/model/ExamInfo.java

@@ -0,0 +1,27 @@
+/*
+ * *************************************************
+ * Copyright (c) 2019 QMTH. All Rights Reserved.
+ * Created by Deason on 2019-05-17 15:35:06.
+ * *************************************************
+ */
+
+package cn.com.qmth.examcloud.app.model;
+
+import java.io.Serializable;
+
+public class ExamInfo implements Serializable {
+    private static final long serialVersionUID = 5830281415991391915L;
+    /**
+     * 是否存在正在进行中的考试
+     */
+    private Boolean existExamingRecord;
+
+    public Boolean getExistExamingRecord() {
+        return existExamingRecord != null ? existExamingRecord : false;
+    }
+
+    public void setExistExamingRecord(Boolean existExamingRecord) {
+        this.existExamingRecord = existExamingRecord;
+    }
+
+}

+ 1 - 1
src/main/java/cn/com/qmth/examcloud/app/service/UserAuthService.java

@@ -22,7 +22,7 @@ public interface UserAuthService {
     /**
      * 检查某考生是否存在正在(在线考试类型)考试中
      */
-    boolean isDoingExam(Long rootOrgId, String studentCode, String identityNumber, String phone);
+    boolean isDoingExam(Long rootOrgId, String accountType, String account);
 
     /**
      * 用户登录

+ 37 - 1
src/main/java/cn/com/qmth/examcloud/app/service/impl/UserAuthServiceImpl.java

@@ -44,7 +44,43 @@ public class UserAuthServiceImpl implements UserAuthService {
     private RedisService redisService;
 
     @Override
-    public boolean isDoingExam(Long rootOrgId, String studentCode, String identityNumber, String phone) {
+    public boolean isDoingExam(Long rootOrgId, String accountType, String account) {
+        if (rootOrgId == null || StringUtils.isBlank(account)) {
+            log.warn(String.format("[isDoingExam] rootOrgId=%s, account=%s, accountType=%s", rootOrgId, account, accountType));
+            return false;
+        }
+
+        FormBody.Builder params = new FormBody.Builder();
+        params.add("rootOrgId", rootOrgId.toString());
+
+        if (LoginType.STUDENT_CODE.name().equals(accountType)) {
+            params.add("studentCode", account);
+        } else if (LoginType.STUDENT_IDENTITY_NUMBER.name().equals(accountType)) {
+            params.add("identityNumber", account);
+        } else {
+            //LoginType.STUDENT_PHONE
+            params.add("phone", account);
+        }
+
+        //封装请求参数
+        final String requestUrl = String.format("%s/api/core/oe/student/examRecord/getStudentOnLineExamInfo", propertyService.getNetExamUrl());
+        try {
+            //执行请求
+            Request request = new Request.Builder()
+                    .url(requestUrl)
+                    .post(params.build())
+                    .build();
+            Response response = HttpClientBuilder.getClient().newCall(request).execute();
+            String bodyStr = response.body().string();
+            if (response.isSuccessful()) {
+                ExamInfo info = new JsonMapper().fromJson(bodyStr, ExamInfo.class);
+                if (info != null) {
+                    return info.getExistExamingRecord();
+                }
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
         return false;
     }