瀏覽代碼

加入西交大登录前查找账号逻辑

wangliang 2 年之前
父節點
當前提交
23a1f4f22f

+ 1 - 0
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/contant/SystemConstant.java

@@ -44,6 +44,7 @@ public class SystemConstant {
     public static final String GET_EQUAL = "=";
     public static final String GET_EQUAL = "=";
     public static final String PATH_MATCH = "*";
     public static final String PATH_MATCH = "*";
     public static final String PATH_SUBSTR = "/#";
     public static final String PATH_SUBSTR = "/#";
+    public static final String METHOD = "post";
 
 
     /**
     /**
      * 缓存配置
      * 缓存配置

+ 60 - 8
xjtu-exchange/src/main/java/com/qmth/xjtu/api/OpenApiController.java

@@ -1,23 +1,32 @@
 package com.qmth.xjtu.api;
 package com.qmth.xjtu.api;
 
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.tools.signature.SignatureEntity;
+import com.qmth.boot.tools.signature.SignatureType;
 import com.qmth.teachcloud.exchange.common.bean.params.OpenParams;
 import com.qmth.teachcloud.exchange.common.bean.params.OpenParams;
 import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
 import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
+import com.qmth.teachcloud.exchange.common.entity.BasicSchool;
 import com.qmth.teachcloud.exchange.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.exchange.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.exchange.common.service.AuthInfoService;
 import com.qmth.teachcloud.exchange.common.service.AuthInfoService;
+import com.qmth.teachcloud.exchange.common.service.BasicSchoolService;
 import com.qmth.teachcloud.exchange.common.service.CommonService;
 import com.qmth.teachcloud.exchange.common.service.CommonService;
 import com.qmth.teachcloud.exchange.common.util.HttpUtil;
 import com.qmth.teachcloud.exchange.common.util.HttpUtil;
 import com.qmth.teachcloud.exchange.common.util.JacksonUtil;
 import com.qmth.teachcloud.exchange.common.util.JacksonUtil;
 import com.qmth.teachcloud.exchange.common.util.Result;
 import com.qmth.teachcloud.exchange.common.util.Result;
 import com.qmth.teachcloud.exchange.common.util.ServletUtil;
 import com.qmth.teachcloud.exchange.common.util.ServletUtil;
 import io.swagger.annotations.*;
 import io.swagger.annotations.*;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -27,10 +36,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Objects;
-import java.util.StringJoiner;
+import java.util.*;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -49,8 +55,8 @@ public class OpenApiController {
     private static final String ACCESS_TOKEN_URL = "http://org.xjtu.edu.cn/openplatform/oauth/getAccessToken";
     private static final String ACCESS_TOKEN_URL = "http://org.xjtu.edu.cn/openplatform/oauth/getAccessToken";
     private static final String USER_INFO_URL = "http://org.xjtu.edu.cn/openplatform/oauth/open/getUserInfo";
     private static final String USER_INFO_URL = "http://org.xjtu.edu.cn/openplatform/oauth/open/getUserInfo";
     private static final String LOGOUT_URL = "http://org.xjtu.edu.cn/openplatform/oauth/logout";
     private static final String LOGOUT_URL = "http://org.xjtu.edu.cn/openplatform/oauth/logout";
-//    private static final String RETURN_URL = "https://org.xjtu.edu.cn/openplatform/login.html";
-    private static final String schoolCode = "xjtu";//测试学校code,正式改成xjtu
+    private static final String SCHOOL_CODE = "xjtu";//测试学校code,正式改成xjtu
+    private static final String LOGIN_BEFORE_XJU_LOGIC_API = "/api/admin/print/open/login_before_xju_logic";//西交大登录之前逻辑
 
 
     @Resource
     @Resource
     CommonService commonService;
     CommonService commonService;
@@ -64,6 +70,12 @@ public class OpenApiController {
     @Value("${cas.config.returnUrl}")
     @Value("${cas.config.returnUrl}")
     String returnUrl;
     String returnUrl;
 
 
+    @Value("${cas.config.teachcloudPrintLoginUrl}")
+    String teachcloudLoginUrl;
+
+    @Resource
+    BasicSchoolService basicSchoolService;
+
     @ApiOperation(value = "西安交通大学cas鉴权接口")
     @ApiOperation(value = "西安交通大学cas鉴权接口")
     @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
     @RequestMapping(value = "/authentication", method = RequestMethod.GET)
     @RequestMapping(value = "/authentication", method = RequestMethod.GET)
@@ -77,7 +89,47 @@ public class OpenApiController {
                 || (Objects.isNull(employeeNo) || Objects.equals(employeeNo, ""))) {
                 || (Objects.isNull(employeeNo) || Objects.equals(employeeNo, ""))) {
             throw ExceptionResultEnum.ERROR.exception("请先通过学校地址登录");
             throw ExceptionResultEnum.ERROR.exception("请先通过学校地址登录");
         }
         }
-        authInfoService.appHasExpired(schoolCode);
+        authInfoService.appHasExpired(SCHOOL_CODE);
+
+        //2022-12-06加入登录之前逻辑
+        if (Objects.isNull(teachcloudLoginUrl) || Objects.equals(teachcloudLoginUrl, "")) {
+            throw ExceptionResultEnum.PARAMS_ERROR.exception("知学登录跳转地址不存在");
+        }
+        String[] strs = teachcloudLoginUrl.split(SystemConstant.PATH_SUBSTR);
+        if (strs[0].contains(SystemConstant.PATH_MATCH)) {
+            strs[0] = strs[0].replace(SystemConstant.PATH_MATCH, SCHOOL_CODE);
+        }
+        QueryWrapper<BasicSchool> basicSchoolQueryWrapper = new QueryWrapper<>();
+        basicSchoolQueryWrapper.lambda().eq(BasicSchool::getCode, SCHOOL_CODE);
+        BasicSchool basicSchool = basicSchoolService.getOne(basicSchoolQueryWrapper);
+        Optional.ofNullable(basicSchool).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("学校信息不存在"));
+
+        Long timestamp = System.currentTimeMillis();
+        String signature = SignatureEntity.build(SignatureType.SECRET, SystemConstant.METHOD, LOGIN_BEFORE_XJU_LOGIC_API, timestamp, basicSchool.getAccessKey(), basicSchool.getAccessSecret());
+
+        String callResult = HttpUtil.postJson(strs[0] + LOGIN_BEFORE_XJU_LOGIC_API, JacksonUtil.parseJson(employeeNo), signature, timestamp);
+        String schoolCode = null;
+        if (!StringUtils.isBlank(callResult)) {
+            log.info("callbackResult:{}", JacksonUtil.parseJson(callResult));
+            Result result = JSON.parseObject(callResult, Result.class);
+            if (result.getCode() == HttpStatus.OK.value()) {
+                Object data = result.getData();
+                List<Map> sysuserList = JSONObject.parseArray(JSON.toJSONString(data), Map.class);
+                if (CollectionUtils.isEmpty(sysuserList)) {
+                    throw ExceptionResultEnum.ERROR.exception("未查到此用户");
+                }
+                if (sysuserList.size() >= 2) {
+                    throw ExceptionResultEnum.ERROR.exception("查询到有多个用户");
+                }
+                Long schoolId = Long.parseLong(String.valueOf(sysuserList.get(0).get("schoolId")));
+                Optional.ofNullable(schoolId).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("学校id为空"));
+                basicSchool = basicSchoolService.getById(schoolId);
+                Optional.ofNullable(basicSchool).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("学校id:" + schoolId + ",学校不存在"));
+                schoolCode = basicSchool.getCode();
+            } else {
+                throw ExceptionResultEnum.ERROR.exception("调用知学知考西交大登录前查找账号接口失败");
+            }
+        }
 
 
         Map<String, Object> accessTokenParams = new LinkedHashMap<>();
         Map<String, Object> accessTokenParams = new LinkedHashMap<>();
         accessTokenParams.put("code", code);
         accessTokenParams.put("code", code);
@@ -157,7 +209,7 @@ public class OpenApiController {
         if (Objects.isNull(gSessionId) || Objects.equals(gSessionId, "")) {
         if (Objects.isNull(gSessionId) || Objects.equals(gSessionId, "")) {
             throw ExceptionResultEnum.PARAMS_ERROR.exception("sessionId为空");
             throw ExceptionResultEnum.PARAMS_ERROR.exception("sessionId为空");
         }
         }
-        authInfoService.appHasExpired(schoolCode);
+        authInfoService.appHasExpired(SCHOOL_CODE);
         Map<String, Object> logoutParams = new LinkedHashMap<>();
         Map<String, Object> logoutParams = new LinkedHashMap<>();
         logoutParams.put("gSessionId", gSessionId);
         logoutParams.put("gSessionId", gSessionId);
         String logoutResult = HttpUtil.post(LOGOUT_URL, logoutParams, null);
         String logoutResult = HttpUtil.post(LOGOUT_URL, logoutParams, null);