|
@@ -1,5 +1,7 @@
|
|
|
package com.ruoyi.web.controller.dingding;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.aliyun.dingtalkcontact_1_0.models.GetUserHeaders;
|
|
|
import com.aliyun.dingtalkcontact_1_0.models.GetUserResponse;
|
|
|
import com.aliyun.dingtalkcontact_1_0.Client;
|
|
@@ -11,13 +13,24 @@ import com.dingtalk.api.DefaultDingTalkClient;
|
|
|
import com.dingtalk.api.DingTalkClient;
|
|
|
import com.dingtalk.api.request.*;
|
|
|
import com.dingtalk.api.response.*;
|
|
|
+import com.dingtalk.oapi.lib.aes.DingTalkEncryptException;
|
|
|
+import com.dingtalk.oapi.lib.aes.DingTalkEncryptor;
|
|
|
+import com.dingtalk.open.app.api.GenericEventListener;
|
|
|
+import com.dingtalk.open.app.api.OpenDingTalkStreamClientBuilder;
|
|
|
+import com.dingtalk.open.app.api.message.GenericOpenDingTalkEvent;
|
|
|
+import com.dingtalk.open.app.api.security.AuthClientCredential;
|
|
|
+import com.dingtalk.open.app.stream.protocol.event.EventAckStatus;
|
|
|
import com.ruoyi.common.constant.Constants;
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
import com.ruoyi.common.core.domain.entity.SysRole;
|
|
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
|
|
+import com.ruoyi.common.core.domain.model.LoginUser;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
+import com.ruoyi.common.utils.dingding.config.DingAppConfig;
|
|
|
import com.ruoyi.common.utils.dingding.config.DingUrlConstant;
|
|
|
+import com.ruoyi.framework.web.service.DingAuthenticationProvider;
|
|
|
+import com.ruoyi.framework.web.service.DingToken;
|
|
|
import com.ruoyi.framework.web.service.SysLoginService;
|
|
|
import com.ruoyi.system.domain.resume.CompanyInfo;
|
|
|
import com.ruoyi.system.domain.resume.CompanyUser;
|
|
@@ -28,6 +41,7 @@ import com.ruoyi.system.service.dingding.DingTokenService;
|
|
|
import com.ruoyi.system.service.resume.ICompanyInfoService;
|
|
|
import com.ruoyi.system.service.resume.ICompanyUserService;
|
|
|
import com.taobao.api.ApiException;
|
|
|
+import com.taobao.api.TaobaoResponse;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -51,7 +65,8 @@ import static com.ruoyi.framework.datasource.DynamicDataSourceContextHolder.log;
|
|
|
@Controller
|
|
|
@RequestMapping(value = "/ding")
|
|
|
public class DingAuthController {
|
|
|
-
|
|
|
+ @Resource
|
|
|
+ private DingAppConfig dingAppConfig;
|
|
|
|
|
|
@Resource
|
|
|
private DingTokenService dingTokenService;
|
|
@@ -73,36 +88,112 @@ public class DingAuthController {
|
|
|
|
|
|
@Autowired
|
|
|
private ICompanyUserService companyUserService;
|
|
|
+ @Autowired
|
|
|
+ private DingAuthenticationProvider dingAuthenticationProvider;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
- * 钉钉用户登录,显示当前登录用户的userId和名称
|
|
|
- *
|
|
|
- * @param authCode 免登临时authCode
|
|
|
- * @return 当前用户
|
|
|
+ * 创建应用,验证回调URL创建有效事件(第一次保存回调URL之前)
|
|
|
*/
|
|
|
- @ApiOperation(value = "钉钉用户登录,显示当前登录用户的userId和名称")
|
|
|
- @PostMapping("/avoidLogin")
|
|
|
- @ResponseBody
|
|
|
- public AjaxResult login(@RequestBody String authCode) {
|
|
|
- String accessToken;
|
|
|
+ private static final String EVENT_CHECK_CREATE_SUITE_URL = "check_create_suite_url";
|
|
|
|
|
|
- // 获取accessToken
|
|
|
- AjaxResult accessTokenSr = dingTokenService.getAccessToken();
|
|
|
- if (!accessTokenSr.isSuccess()) {
|
|
|
- return accessTokenSr;
|
|
|
- }
|
|
|
- accessToken = accessTokenSr.get(accessTokenSr.MSG_TAG).toString();
|
|
|
+ /**
|
|
|
+ * 创建应用,验证回调URL变更有效事件(第一次保存回调URL之后)
|
|
|
+ */
|
|
|
+ private static final String EVENT_CHECK_UPADTE_SUITE_URL = "check_update_suite_url";
|
|
|
|
|
|
- // 获取用户userId
|
|
|
- AjaxResult userIdSr = getUserInfo(accessToken, authCode);
|
|
|
- if (!userIdSr.isSuccess()) {
|
|
|
- return userIdSr;
|
|
|
+ /**
|
|
|
+ * suite_ticket推送事件
|
|
|
+ */
|
|
|
+ private static final String EVENT_SUITE_TICKET = "suite_ticket";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 企业授权开通应用事件
|
|
|
+ */
|
|
|
+ private static final String EVENT_TMP_AUTH_CODE = "tmp_auth_code";
|
|
|
+
|
|
|
+ @PostMapping(value = "dingCallback2")
|
|
|
+ public Object dingCallback2(
|
|
|
+ @RequestParam(value = "signature") String signature,
|
|
|
+ @RequestParam(value = "timestamp") Long timestamp,
|
|
|
+ @RequestParam(value = "nonce") String nonce,
|
|
|
+ @RequestBody(required = false) JSONObject body
|
|
|
+ ) {
|
|
|
+ String params = "signature:" + signature + " timestamp:" + timestamp + " nonce:" + nonce + " body:" + body;
|
|
|
+ DingTalkEncryptor dingTalkEncryptor = null;
|
|
|
+ try {
|
|
|
+ dingTalkEncryptor = new DingTalkEncryptor(Constant.TOKEN, Constant.ENCODING_AES_KEY, Constant.SUITE_KEY);
|
|
|
+ // 从post请求的body中获取回调信息的加密数据进行解密处理,消息加解密参见下文
|
|
|
+ String encrypt = body.getString("encrypt");
|
|
|
+ String plainText = dingTalkEncryptor.getDecryptMsg(signature, timestamp.toString(), nonce, encrypt);
|
|
|
+ log.info("应用suite_ticket数据推送: " + plainText);
|
|
|
+ JSONObject callBackContent = JSON.parseObject(plainText);
|
|
|
+ log.info("begin callback encrypt:" + callBackContent.toString());
|
|
|
+ // 根据回调事件类型做不同的业务处理
|
|
|
+ String eventType = callBackContent.getString("EventType");
|
|
|
+ //TODO 将数据持久化
|
|
|
+ return plainText;
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("process callback fail." + params, e);
|
|
|
+ return "fail";
|
|
|
}
|
|
|
+ }
|
|
|
+ @GetMapping(value = "send")
|
|
|
+ public void send() {
|
|
|
+ try {
|
|
|
|
|
|
- // 获取用户详情
|
|
|
- AjaxResult userInfo = this.getUser(accessToken, userIdSr.get(userIdSr.MSG_TAG).toString());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.info("start fail."+e.getMessage());
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- return userInfo;
|
|
|
+ @PostMapping(value = "callback")
|
|
|
+ public Object dingCallback(
|
|
|
+ @RequestParam(value = "signature") String signature,
|
|
|
+ @RequestParam(value = "timestamp") Long timestamp,
|
|
|
+ @RequestParam(value = "nonce") String nonce,
|
|
|
+ @RequestBody(required = false) JSONObject body
|
|
|
+ ) {
|
|
|
+ String params = "signature:" + signature + " timestamp:" + timestamp + " nonce:" + nonce + " body:" + body;
|
|
|
+ try {
|
|
|
+ log.info("begin callback:" + params);
|
|
|
+ DingTalkEncryptor dingTalkEncryptor = new DingTalkEncryptor(Constant.TOKEN, Constant.ENCODING_AES_KEY, Constant.SUITE_KEY);
|
|
|
+
|
|
|
+ // 从post请求的body中获取回调信息的加密数据进行解密处理
|
|
|
+ String encrypt = body.getString("encrypt");
|
|
|
+ String plainText = dingTalkEncryptor.getDecryptMsg(signature, timestamp.toString(), nonce, encrypt);
|
|
|
+ JSONObject callBackContent = JSON.parseObject(plainText);
|
|
|
+ log.info("begin callback encrypt:" + callBackContent.toString());
|
|
|
+ // 根据回调事件类型做不同的业务处理
|
|
|
+ String eventType = callBackContent.getString("EventType");
|
|
|
+ if (EVENT_CHECK_CREATE_SUITE_URL.equals(eventType)) {
|
|
|
+ log.info("验证新创建的回调URL有效性: " + plainText);
|
|
|
+ } else if (EVENT_CHECK_UPADTE_SUITE_URL.equals(eventType)) {
|
|
|
+ log.info("验证更新回调URL有效性: " + plainText);
|
|
|
+ } else if (EVENT_SUITE_TICKET.equals(eventType)) {
|
|
|
+ // suite_ticket用于用签名形式生成accessToken(访问钉钉服务端的凭证),需要保存到应用的db。
|
|
|
+ // 钉钉会定期向本callback url推送suite_ticket新值用以提升安全性。
|
|
|
+ // 应用在获取到新的时值时,保存db成功后,返回给钉钉success加密串(如本demo的return)
|
|
|
+ log.info("应用suite_ticket数据推送: " + plainText);
|
|
|
+ } else if (EVENT_TMP_AUTH_CODE.equals(eventType)) {
|
|
|
+ // 本事件应用应该异步进行授权开通企业的初始化,目的是尽最大努力快速返回给钉钉服务端。用以提升企业管理员开通应用体验
|
|
|
+ // 即使本接口没有收到数据或者收到事件后处理初始化失败都可以后续再用户试用应用时从前端获取到corpId并拉取授权企业信息,进而初始化开通及企业。
|
|
|
+ log.info("企业授权开通应用事件: " + plainText);
|
|
|
+ } else {
|
|
|
+ // 其他类型事件处理
|
|
|
+ }
|
|
|
+ log.info("callback 成功");
|
|
|
+ log.info("plainText:" + plainText);
|
|
|
+ // 返回success的加密信息表示回调处理成功
|
|
|
+ Map<String, String> success = dingTalkEncryptor.getEncryptedMap("success", timestamp, nonce);
|
|
|
+ log.info("success:" + JSON.toJSONString(success));
|
|
|
+ return success;
|
|
|
+ } catch (Exception e) {
|
|
|
+ //失败的情况,应用的开发者应该通过告警感知,并干预修复
|
|
|
+ log.error("process callback fail." + params, e);
|
|
|
+ return "fail";
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -111,34 +202,92 @@ public class DingAuthController {
|
|
|
* @param authCode 免登临时authCode
|
|
|
* @return 当前用户
|
|
|
*/
|
|
|
+// @ApiOperation(value = "钉钉用户登录,显示当前登录用户的userId和名称")
|
|
|
+// @PostMapping("/avoidLogin")
|
|
|
+// @ResponseBody
|
|
|
+// public AjaxResult login(@RequestBody String authCode) {
|
|
|
+// String accessToken;
|
|
|
+//
|
|
|
+// // 获取accessToken
|
|
|
+// AjaxResult accessTokenSr = dingTokenService.getAccessToken();
|
|
|
+// if (!accessTokenSr.isSuccess()) {
|
|
|
+// return accessTokenSr;
|
|
|
+// }
|
|
|
+// accessToken = accessTokenSr.get(accessTokenSr.MSG_TAG).toString();
|
|
|
+//
|
|
|
+// // 获取用户userId
|
|
|
+// AjaxResult userIdSr = getUserInfo(accessToken, authCode);
|
|
|
+// if (!userIdSr.isSuccess()) {
|
|
|
+// return userIdSr;
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 获取用户详情
|
|
|
+// AjaxResult userInfo = this.getUser(accessToken, userIdSr.get(userIdSr.MSG_TAG).toString());
|
|
|
+//
|
|
|
+// return userInfo;
|
|
|
+// }
|
|
|
+
|
|
|
+// @ApiOperation(value = "11111")
|
|
|
+// @PostMapping("/avoidLogin")
|
|
|
+// @ResponseBody
|
|
|
+// public AjaxResult login2() {
|
|
|
+// String accessToken;
|
|
|
+
|
|
|
+ // 获取accessToken
|
|
|
+// AjaxResult accessTokenSr = dingTokenService.getAccessToken();
|
|
|
+// if (!accessTokenSr.isSuccess()) {
|
|
|
+// return accessTokenSr;
|
|
|
+// }
|
|
|
+// accessToken = accessTokenSr.get(accessTokenSr.MSG_TAG).toString();
|
|
|
+// AjaxResult userIdSr = getUserInfo(accessToken, "authCode");
|
|
|
+// if (!userIdSr.isSuccess()) {
|
|
|
+// return userIdSr;
|
|
|
+// }
|
|
|
+// loginService.authSingleSignIn2(accessToken, authCode);
|
|
|
+// String token = loginService.authSingleSignIn2("123", "123");
|
|
|
+//
|
|
|
+// if (StringUtils.isNotEmpty(token)){
|
|
|
+// userIdSr.put(Constants.TOKEN, token);
|
|
|
+// }
|
|
|
+// return userIdSr;
|
|
|
+// }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 钉钉用户登录,显示当前登录用户的userId和名称
|
|
|
+ *
|
|
|
+ * @param authCode 免登临时authCode
|
|
|
+ * @return 当前用户
|
|
|
+ */
|
|
|
+
|
|
|
@ApiOperation(value = "钉钉用户登录第三方企业应用,显示当前登录用户的userId和名称")
|
|
|
@PostMapping("/authLogin")
|
|
|
@ResponseBody
|
|
|
public AjaxResult authLogin(@RequestBody String authCode) {
|
|
|
String accessToken = dingTokenService.getCorpAccessToken();
|
|
|
- if(StringUtils.isNotEmpty(accessToken)){
|
|
|
+ if (StringUtils.isNotEmpty(accessToken)) {
|
|
|
// 获取用户userId
|
|
|
AjaxResult userIdSr = getUserInfo(accessToken, authCode);
|
|
|
if (!userIdSr.isSuccess()) {
|
|
|
return userIdSr;
|
|
|
}
|
|
|
- OapiV2UserGetResponse response = this.getAuthUser(accessToken, userIdSr.get(userIdSr.MSG_TAG).toString());
|
|
|
- SysUser sysUser = dingAuthService.getUserByUsername(response.getResult().getMobile());
|
|
|
- if(StringUtils.isNull(sysUser)){
|
|
|
- // todo 生成用户信息进行登录
|
|
|
- sysUser = addUserAndOrg(response);
|
|
|
- }
|
|
|
- userIdSr.put("sysUser",sysUser);
|
|
|
- String token = loginService.authSingleSignIn(sysUser.getUserName());
|
|
|
- if (StringUtils.isNotEmpty(token)){
|
|
|
- userIdSr.put(Constants.TOKEN, token);
|
|
|
+ Map<String, Object> stringObjectMap = loginService.authSingleSignIn2(accessToken, userIdSr.get(userIdSr.MSG_TAG).toString());
|
|
|
+ DingToken dingToken = (DingToken) stringObjectMap.get("authentication");
|
|
|
+ if (StringUtils.isNull(dingToken)) {
|
|
|
+ OapiV2UserGetResponse oapiV2UserGetResponse = (OapiV2UserGetResponse) dingToken.getTaobaoResponse();
|
|
|
+ SysUser sysUser = dingAuthService.getUserByUsername(oapiV2UserGetResponse.getResult().getMobile());
|
|
|
+ if (StringUtils.isNull(sysUser)) {
|
|
|
+ // todo 生成用户信息进行登录
|
|
|
+ addUserAndOrg(oapiV2UserGetResponse);
|
|
|
+ }
|
|
|
}
|
|
|
+ String token = stringObjectMap.get("token").toString();
|
|
|
return userIdSr;
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
return AjaxResult.error("getAccessToken failed");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* 访问/user/getuserinfo接口获取用户userId
|
|
|
*
|
|
@@ -233,38 +382,37 @@ public class DingAuthController {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
@RequestMapping(value = "/getAdminInfo", method = RequestMethod.GET)
|
|
|
- public AjaxResult getAdminInfo(@RequestParam("authCode")String authCode) {
|
|
|
- try {
|
|
|
- com.aliyun.dingtalkoauth2_1_0.Client client = this.createClientNew();
|
|
|
- String accessToken = dingTokenService.getAdminUserAccessToken();
|
|
|
- GetSsoUserInfoHeaders getSsoUserInfoHeaders = new GetSsoUserInfoHeaders();
|
|
|
- getSsoUserInfoHeaders.xAcsDingtalkAccessToken = accessToken;
|
|
|
- GetSsoUserInfoRequest getSsoUserInfoRequest = new GetSsoUserInfoRequest()
|
|
|
- .setCode(authCode);
|
|
|
- // 获取应用管理员的身份信息
|
|
|
- GetSsoUserInfoResponse response = client.getSsoUserInfoWithOptions(getSsoUserInfoRequest, getSsoUserInfoHeaders, new RuntimeOptions());
|
|
|
- } catch (TeaException err) {
|
|
|
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
|
|
|
- // err 中含有 code 和 message 属性,可帮助开发定位问题
|
|
|
- }
|
|
|
- } catch (Exception _err) {
|
|
|
- TeaException err = new TeaException(_err.getMessage(), _err);
|
|
|
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
|
|
|
- // err 中含有 code 和 message 属性,可帮助开发定位问题
|
|
|
- }
|
|
|
+ public AjaxResult getAdminInfo(@RequestParam("authCode") String authCode) {
|
|
|
+ try {
|
|
|
+ com.aliyun.dingtalkoauth2_1_0.Client client = this.createClientNew();
|
|
|
+ String accessToken = dingTokenService.getAdminUserAccessToken();
|
|
|
+ GetSsoUserInfoHeaders getSsoUserInfoHeaders = new GetSsoUserInfoHeaders();
|
|
|
+ getSsoUserInfoHeaders.xAcsDingtalkAccessToken = accessToken;
|
|
|
+ GetSsoUserInfoRequest getSsoUserInfoRequest = new GetSsoUserInfoRequest()
|
|
|
+ .setCode(authCode);
|
|
|
+ // 获取应用管理员的身份信息
|
|
|
+ GetSsoUserInfoResponse response = client.getSsoUserInfoWithOptions(getSsoUserInfoRequest, getSsoUserInfoHeaders, new RuntimeOptions());
|
|
|
+ } catch (TeaException err) {
|
|
|
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
|
|
|
+ // err 中含有 code 和 message 属性,可帮助开发定位问题
|
|
|
+ }
|
|
|
+ } catch (Exception _err) {
|
|
|
+ TeaException err = new TeaException(_err.getMessage(), _err);
|
|
|
+ if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
|
|
|
+ // err 中含有 code 和 message 属性,可帮助开发定位问题
|
|
|
}
|
|
|
+ }
|
|
|
return AjaxResult.success();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据保存的code值和获取的access_token,获取应用管理身份信息
|
|
|
* openapi@dingtalk
|
|
|
+ *
|
|
|
* @param code
|
|
|
* @param access_token
|
|
|
- * @return
|
|
|
- * OapiSsoGetuserinfoResponse
|
|
|
+ * @return OapiSsoGetuserinfoResponse
|
|
|
* 2020-11-3
|
|
|
*/
|
|
|
public OapiSsoGetuserinfoResponse getAdminUserInfo(String code, String access_token) {
|
|
@@ -289,10 +437,10 @@ public class DingAuthController {
|
|
|
* @param authCode 免登临时authCode
|
|
|
* @return 当前用户
|
|
|
*/
|
|
|
- @ApiOperation(value = "钉钉用户登录")
|
|
|
+ @ApiOperation(value = "钉钉内部应用-用户登录")
|
|
|
@PostMapping("/authToken2")
|
|
|
@ResponseBody
|
|
|
- public AjaxResult authToken2(@RequestBody String authCode){
|
|
|
+ public AjaxResult authToken2(@RequestBody String authCode) {
|
|
|
// 获取accessToken
|
|
|
try {
|
|
|
AjaxResult accessTokenSr = dingTokenService.getUserAccessToken(authCode);
|
|
@@ -302,22 +450,22 @@ public class DingAuthController {
|
|
|
getUserHeaders.xAcsDingtalkAccessToken = accessTokenSr.get(accessTokenSr.MSG_TAG).toString();
|
|
|
try {
|
|
|
GetUserResponse response = client.getUserWithOptions("me", getUserHeaders, new RuntimeOptions());
|
|
|
- accessTokenSr.put("sysUser",response.getBody());
|
|
|
+ accessTokenSr.put("sysUser", response.getBody());
|
|
|
|
|
|
SysUser sysUser = dingAuthService.getUserByUsername(response.getBody().getMobile());
|
|
|
|
|
|
- if(StringUtils.isNull(sysUser) ){
|
|
|
+ if (StringUtils.isNull(sysUser)) {
|
|
|
// todo 生成用户信息进行登录
|
|
|
}
|
|
|
|
|
|
String token = loginService.authSingleSignIn(sysUser.getUserName());
|
|
|
- if (StringUtils.isNotEmpty(token)){
|
|
|
+ if (StringUtils.isNotEmpty(token)) {
|
|
|
accessTokenSr.put(Constants.TOKEN, token);
|
|
|
}
|
|
|
} catch (TeaException e) {
|
|
|
- return AjaxResult.error(e.getMessage(),e);
|
|
|
+ return AjaxResult.error(e.getMessage(), e);
|
|
|
} catch (Exception e) {
|
|
|
- return AjaxResult.error(e.getMessage(),e);
|
|
|
+ return AjaxResult.error(e.getMessage(), e);
|
|
|
}
|
|
|
return accessTokenSr;
|
|
|
} catch (Exception e) {
|
|
@@ -325,12 +473,14 @@ public class DingAuthController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* 钉钉登录不存在用户自动增加用户以及组织信息
|
|
|
+ *
|
|
|
* @param response
|
|
|
* @return
|
|
|
*/
|
|
|
- private SysUser addUserAndOrg(OapiV2UserGetResponse response){
|
|
|
+ private SysUser addUserAndOrg(OapiV2UserGetResponse response) {
|
|
|
SysUser newUser = new SysUser();
|
|
|
newUser.setUserName(response.getResult().getMobile());
|
|
|
newUser.setAvatar(response.getResult().getAvatar());
|
|
@@ -341,7 +491,7 @@ public class DingAuthController {
|
|
|
//角色自动赋值为简历管理角色
|
|
|
Long[] roleIds = new Long[1];
|
|
|
SysRole role = roleService.selectRoleByKey("resume");
|
|
|
- if(role != null){
|
|
|
+ if (role != null) {
|
|
|
roleIds[0] = role.getRoleId();
|
|
|
}
|
|
|
newUser.setRoleIds(roleIds);
|
|
@@ -352,7 +502,7 @@ public class DingAuthController {
|
|
|
CompanyInfo companyInfo = new CompanyInfo();
|
|
|
companyInfo.setCorpId(corpId);
|
|
|
List<CompanyInfo> companyInfoList = companyInfoService.selectCompanyInfoList(companyInfo);
|
|
|
- if(companyInfoList != null && !companyInfoList.isEmpty()){
|
|
|
+ if (companyInfoList != null && !companyInfoList.isEmpty()) {
|
|
|
CompanyUser companyUser = new CompanyUser();
|
|
|
companyUser.setCompanyId(companyInfoList.get(0).getId());
|
|
|
companyUser.setUserId(newUser.getUserId());
|
|
@@ -363,6 +513,7 @@ public class DingAuthController {
|
|
|
|
|
|
/**
|
|
|
* 使用 Token 初始化账号Client
|
|
|
+ *
|
|
|
* @return Client
|
|
|
* @throws Exception
|
|
|
*/
|
|
@@ -375,6 +526,7 @@ public class DingAuthController {
|
|
|
|
|
|
/**
|
|
|
* 使用 Token 初始化账号后台Client
|
|
|
+ *
|
|
|
* @return Client
|
|
|
* @throws Exception
|
|
|
*/
|
|
@@ -386,5 +538,4 @@ public class DingAuthController {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
}
|