mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 04:39:00 +08:00
🎨 Improving structure / format of the code.
This commit is contained in:
1 parent
245154d5b8
commit
3df0e55421
3 files changed
+102
-84
No files matched your search
+5
@@ -63,6 +63,11 @@ public enum LoginTypeEnum {
|
||||
*/
|
||||
OSC("OSC", "开源中国登录"),
|
||||
|
||||
/**
|
||||
* 钉钉
|
||||
*/
|
||||
dingtalk("DINGTALK", "钉钉"),
|
||||
|
||||
/**
|
||||
* CAS 登录
|
||||
*/
|
||||
|
||||
+10
-4
@@ -1,11 +1,12 @@
|
||||
package com.pig4cloud.pigx.admin.controller;
|
||||
|
||||
import com.pig4cloud.pigx.admin.api.entity.SysDept;
|
||||
import com.pig4cloud.pigx.admin.service.ConnectService;
|
||||
import com.pig4cloud.pigx.admin.service.SysDeptService;
|
||||
import com.pig4cloud.pigx.common.core.util.R;
|
||||
import com.pig4cloud.pigx.common.security.annotation.Inner;
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
@@ -25,13 +26,18 @@ public class ConnectController {
|
||||
|
||||
private final ConnectService connectService;
|
||||
|
||||
private final SysDeptService deptService;
|
||||
|
||||
/**
|
||||
* 同步钉钉用户
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/sync/ding/user/{deptId}")
|
||||
public R syncUser(@PathVariable("deptId") Long deptId) {
|
||||
return R.ok(connectService.syncDingUser(deptId));
|
||||
@PostMapping("/sync/ding/user")
|
||||
public R syncUser() {
|
||||
for (SysDept sysDept : deptService.list()) {
|
||||
connectService.syncDingUser(sysDept.getDeptId());
|
||||
}
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+87
-80
@@ -1,6 +1,8 @@
|
||||
package com.pig4cloud.pigx.admin.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.extra.pinyin.PinyinUtil;
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
@@ -23,6 +25,7 @@ import com.pig4cloud.pigx.admin.api.entity.*;
|
||||
import com.pig4cloud.pigx.admin.mapper.SysSocialDetailsMapper;
|
||||
import com.pig4cloud.pigx.admin.service.*;
|
||||
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
|
||||
import com.pig4cloud.pigx.common.core.constant.enums.LoginTypeEnum;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -30,7 +33,9 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* 互联平台实现
|
||||
@@ -57,8 +62,8 @@ public class ConnectServiceImpl implements ConnectService {
|
||||
private final SysUserRoleService sysUserRoleService;
|
||||
|
||||
private String getDingAccessToken() {
|
||||
SysSocialDetails dingTalk = sysSocialDetailsMapper
|
||||
.selectOne(Wrappers.<SysSocialDetails>lambdaQuery().eq(SysSocialDetails::getType, "ding"));
|
||||
SysSocialDetails dingTalk = sysSocialDetailsMapper.selectOne(Wrappers.<SysSocialDetails>lambdaQuery()
|
||||
.eq(SysSocialDetails::getType, LoginTypeEnum.dingtalk.getType()));
|
||||
GetAccessTokenRequest getAccessTokenRequest = new GetAccessTokenRequest().setAppKey(dingTalk.getAppId())
|
||||
.setAppSecret(dingTalk.getAppSecret());
|
||||
GetAccessTokenResponse tokenResponse = null;
|
||||
@@ -86,8 +91,7 @@ public class ConnectServiceImpl implements ConnectService {
|
||||
/**
|
||||
* 同步钉钉角色
|
||||
*
|
||||
* @see <a href=
|
||||
* "https://open.dingtalk.com/document/orgapp-server/obtains-a-list-of-enterprise-roles"/>
|
||||
* @link https://open.dingtalk.com/document/orgapp-server/obtains-a-list-of-enterprise-roles
|
||||
*/
|
||||
@SneakyThrows
|
||||
@Override
|
||||
@@ -115,24 +119,19 @@ public class ConnectServiceImpl implements ConnectService {
|
||||
|
||||
hasMore = resultStr.get("hasMore", Boolean.class);
|
||||
List<JSONObject> list = resultStr.get("list", List.class);
|
||||
|
||||
if (CollectionUtils.isNotEmpty(list)) {
|
||||
list.forEach(item -> {
|
||||
List<JSONObject> roles = (List<JSONObject>) item.get("roles");
|
||||
if (CollectionUtils.isNotEmpty(roles)) {
|
||||
// 过滤出数据库不存在的角色
|
||||
List<SysRole> sysRoles = roles.stream().filter(
|
||||
role -> roleList.stream().noneMatch(db -> db.getRoleName().equals(role.get("name"))))
|
||||
.map(role -> {
|
||||
SysRole sysRole = new SysRole();
|
||||
sysRole.setRoleId(Convert.toLong(role.get("id")));
|
||||
sysRole.setRoleName(Convert.toStr(role.get("name")));
|
||||
return sysRole;
|
||||
}).collect(Collectors.toList());
|
||||
insertRole.addAll(sysRoles);
|
||||
}
|
||||
});
|
||||
}
|
||||
// 处理返回的数据
|
||||
List<SysRole> collect = list.stream().flatMap(
|
||||
(Function<JSONObject, Stream<JSONObject>>) item -> ((List<JSONObject>) item.get("roles")).stream())
|
||||
.filter(role -> roleList.stream().noneMatch(db -> db.getRoleName().equals(role.get("name"))))
|
||||
.map(role -> {
|
||||
SysRole sysRole = new SysRole();
|
||||
sysRole.setRoleId(Convert.toLong(role.get("id")));
|
||||
sysRole.setRoleCode(String.format("ROLE_DING_%s", Convert.toStr(role.get("id"))));
|
||||
sysRole.setRoleCode(PinyinUtil.getPinyin(Convert.toStr(role.get("name"))));
|
||||
sysRole.setRoleName(Convert.toStr(role.get("name")));
|
||||
return sysRole;
|
||||
}).collect(Collectors.toList());
|
||||
insertRole.addAll(collect);
|
||||
}
|
||||
while (hasMore);
|
||||
|
||||
@@ -183,29 +182,31 @@ public class ConnectServiceImpl implements ConnectService {
|
||||
JSONObject result = JSONUtil.parseObj(rsp.getBody());
|
||||
List<JSONObject> resultList = result.get("result", List.class);
|
||||
|
||||
if (CollectionUtils.isNotEmpty(resultList)) {
|
||||
// 过滤出数据库存在的部门
|
||||
List<SysDept> depts = resultList.stream()
|
||||
.filter(dept -> deptList.stream().noneMatch(sysDept -> sysDept.getName().equals(dept.get("name"))))
|
||||
.map(dept -> {
|
||||
SysDept sysDept = new SysDept();
|
||||
sysDept.setName(Convert.toStr(dept.get("name")));
|
||||
sysDept.setDeptId(Convert.toLong(dept.get("dept_id")));
|
||||
sysDept.setParentId(Convert.toLong(dept.get("parent_id")));
|
||||
return sysDept;
|
||||
}).collect(Collectors.toList());
|
||||
if (CollUtil.isEmpty(resultList)) {
|
||||
return sysDepts;
|
||||
}
|
||||
|
||||
// 递归查询下一级
|
||||
if (CollectionUtils.isNotEmpty(depts)) {
|
||||
sysDepts.addAll(depts);
|
||||
depts.forEach(dept -> {
|
||||
OapiV2DepartmentListsubRequest request = new OapiV2DepartmentListsubRequest();
|
||||
request.setDeptId(dept.getDeptId());
|
||||
request.setLanguage("zh_CN");
|
||||
List<SysDept> childDept = queryChildDept(request, token, deptList);
|
||||
sysDepts.addAll(childDept);
|
||||
});
|
||||
}
|
||||
// 过滤出数据库存在的部门
|
||||
List<SysDept> depts = resultList.stream()
|
||||
.filter(dept -> deptList.stream().noneMatch(sysDept -> sysDept.getName().equals(dept.get("name"))))
|
||||
.map(dept -> {
|
||||
SysDept sysDept = new SysDept();
|
||||
sysDept.setName(Convert.toStr(dept.get("name")));
|
||||
sysDept.setDeptId(Convert.toLong(dept.get("dept_id")));
|
||||
sysDept.setParentId(Convert.toLong(dept.get("parent_id")));
|
||||
return sysDept;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
// 递归查询下一级
|
||||
if (CollectionUtils.isNotEmpty(depts)) {
|
||||
sysDepts.addAll(depts);
|
||||
depts.forEach(dept -> {
|
||||
OapiV2DepartmentListsubRequest request = new OapiV2DepartmentListsubRequest();
|
||||
request.setDeptId(dept.getDeptId());
|
||||
request.setLanguage("zh_CN");
|
||||
List<SysDept> childDept = queryChildDept(request, token, deptList);
|
||||
sysDepts.addAll(childDept);
|
||||
});
|
||||
}
|
||||
|
||||
return sysDepts;
|
||||
@@ -235,49 +236,55 @@ public class ConnectServiceImpl implements ConnectService {
|
||||
|
||||
JSONObject jsonObject = JSONUtil.parseObj(rsp.getBody());
|
||||
JSONObject result = jsonObject.getJSONObject("result");
|
||||
|
||||
if (result == null) {
|
||||
return false;
|
||||
}
|
||||
List<String> useridList = result.get("userid_list", List.class);
|
||||
|
||||
// 查询用户详情
|
||||
if (CollectionUtils.isNotEmpty(useridList)) {
|
||||
for (String userid : useridList) {
|
||||
DingTalkClient userClient = new DefaultDingTalkClient(SecurityConstants.DING_USER_INFO_URL);
|
||||
OapiV2UserGetRequest userGetRequest = new OapiV2UserGetRequest();
|
||||
userGetRequest.setUserid(userid);
|
||||
OapiV2UserGetResponse userGetResponse = userClient.execute(userGetRequest, token);
|
||||
JSONObject userResult = JSONUtil.parseObj(userGetResponse.getBody());
|
||||
JSONObject userObj = JSONUtil.parseObj(userResult.get("result"));
|
||||
for (String userid : useridList) {
|
||||
DingTalkClient userClient = new DefaultDingTalkClient(SecurityConstants.DING_USER_INFO_URL);
|
||||
OapiV2UserGetRequest userGetRequest = new OapiV2UserGetRequest();
|
||||
userGetRequest.setUserid(userid);
|
||||
OapiV2UserGetResponse userGetResponse = userClient.execute(userGetRequest, token);
|
||||
JSONObject userResult = JSONUtil.parseObj(userGetResponse.getBody());
|
||||
JSONObject userObj = JSONUtil.parseObj(userResult.get("result"));
|
||||
|
||||
boolean exist = users.stream().anyMatch(user -> user.getPhone().equals(userObj.getStr("mobile")));
|
||||
|
||||
if (!exist) {
|
||||
// 用户部门信息
|
||||
JSONArray deptOrders = userObj.getJSONArray("dept_order_list");
|
||||
JSONObject deptInfo = (JSONObject) deptOrders.get(0);
|
||||
|
||||
// 用户信息
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser.setDeptId(Convert.toLong(deptInfo.get("dept_id")));
|
||||
sysUser.setAvatar(userObj.getStr("avatar"));
|
||||
sysUser.setUsername(userObj.getStr("name"));
|
||||
sysUser.setPhone(userObj.getStr("mobile"));
|
||||
sysUser.setNickname(userObj.getStr("nickname"));
|
||||
sysUser.setEmail(userObj.getStr("email"));
|
||||
sysUserService.save(sysUser);
|
||||
|
||||
// 用户角色信息
|
||||
JSONArray roleList = userObj.getJSONArray("role_list");
|
||||
if (roleList != null && roleList.size() > 0) {
|
||||
JSONObject roleInfo = (JSONObject) roleList.get(0);
|
||||
Long userRoleId = Convert.toLong(roleInfo.get("id"));
|
||||
SysUserRole sysUserRole = new SysUserRole();
|
||||
sysUserRole.setUserId(sysUser.getUserId());
|
||||
sysUserRole.setRoleId(userRoleId);
|
||||
sysUserRoleService.save(sysUserRole);
|
||||
}
|
||||
}
|
||||
boolean exist = users.stream().anyMatch(user -> user.getPhone().equals(userObj.getStr("mobile")));
|
||||
|
||||
if (exist) {
|
||||
log.info("用户已存在 {}", userid);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 用户部门信息
|
||||
JSONArray deptOrders = userObj.getJSONArray("dept_order_list");
|
||||
JSONObject deptInfo = (JSONObject) deptOrders.get(0);
|
||||
|
||||
// 用户信息
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser.setDeptId(Convert.toLong(deptInfo.get("dept_id")));
|
||||
sysUser.setAvatar(userObj.getStr("avatar"));
|
||||
sysUser.setUsername(userObj.getStr("mobile"));
|
||||
sysUser.setPhone(userObj.getStr("mobile"));
|
||||
sysUser.setNickname(userObj.getStr("nickname"));
|
||||
sysUser.setName(userObj.getStr("name"));
|
||||
sysUser.setEmail(userObj.getStr("email"));
|
||||
sysUserService.save(sysUser);
|
||||
|
||||
// 用户角色信息
|
||||
JSONArray roleList = userObj.getJSONArray("role_list");
|
||||
|
||||
if (roleList == null) {
|
||||
continue;
|
||||
}
|
||||
JSONObject roleInfo = (JSONObject) roleList.get(0);
|
||||
Long userRoleId = Convert.toLong(roleInfo.get("id"));
|
||||
SysUserRole sysUserRole = new SysUserRole();
|
||||
sysUserRole.setUserId(sysUser.getUserId());
|
||||
sysUserRole.setRoleId(userRoleId);
|
||||
sysUserRoleService.save(sysUserRole);
|
||||
}
|
||||
|
||||
return Boolean.TRUE;
|
||||
|
||||
Reference in new issue
Block a user