mirror of https://gitee.com/topiam/eiam
⚡ 优化代码
parent
d19448d113
commit
de70c194f5
|
@ -21,7 +21,6 @@ import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
@ -34,18 +33,14 @@ import cn.topiam.employee.audit.context.AuditContext;
|
||||||
import cn.topiam.employee.audit.entity.Target;
|
import cn.topiam.employee.audit.entity.Target;
|
||||||
import cn.topiam.employee.audit.enums.TargetType;
|
import cn.topiam.employee.audit.enums.TargetType;
|
||||||
import cn.topiam.employee.common.entity.account.OrganizationEntity;
|
import cn.topiam.employee.common.entity.account.OrganizationEntity;
|
||||||
import cn.topiam.employee.common.entity.account.OrganizationMemberEntity;
|
|
||||||
import cn.topiam.employee.common.entity.account.QUserEntity;
|
import cn.topiam.employee.common.entity.account.QUserEntity;
|
||||||
import cn.topiam.employee.common.enums.DataOrigin;
|
import cn.topiam.employee.common.enums.DataOrigin;
|
||||||
import cn.topiam.employee.common.repository.account.OrganizationMemberRepository;
|
|
||||||
import cn.topiam.employee.common.repository.account.OrganizationRepository;
|
import cn.topiam.employee.common.repository.account.OrganizationRepository;
|
||||||
import cn.topiam.employee.console.converter.account.OrganizationConverter;
|
import cn.topiam.employee.console.converter.account.OrganizationConverter;
|
||||||
import cn.topiam.employee.console.pojo.result.account.*;
|
import cn.topiam.employee.console.pojo.result.account.*;
|
||||||
import cn.topiam.employee.console.pojo.save.account.OrganizationCreateParam;
|
import cn.topiam.employee.console.pojo.save.account.OrganizationCreateParam;
|
||||||
import cn.topiam.employee.console.pojo.update.account.OrganizationUpdateParam;
|
import cn.topiam.employee.console.pojo.update.account.OrganizationUpdateParam;
|
||||||
import cn.topiam.employee.console.service.account.OrganizationService;
|
import cn.topiam.employee.console.service.account.OrganizationService;
|
||||||
import cn.topiam.employee.core.mq.UserMessagePublisher;
|
|
||||||
import cn.topiam.employee.core.mq.UserMessageTag;
|
|
||||||
import cn.topiam.employee.support.repository.id.SnowflakeIdGenerator;
|
import cn.topiam.employee.support.repository.id.SnowflakeIdGenerator;
|
||||||
import cn.topiam.employee.support.util.BeanUtils;
|
import cn.topiam.employee.support.util.BeanUtils;
|
||||||
|
|
||||||
|
@ -116,7 +111,6 @@ public class OrganizationServiceImpl implements OrganizationService {
|
||||||
Optional<OrganizationEntity> optional = this.organizationRepository.findById(param.getId());
|
Optional<OrganizationEntity> optional = this.organizationRepository.findById(param.getId());
|
||||||
if (optional.isPresent()) {
|
if (optional.isPresent()) {
|
||||||
OrganizationEntity entity = optional.get();
|
OrganizationEntity entity = optional.get();
|
||||||
String userIds;
|
|
||||||
//如果修改了名字,递归修改和该组织有关所有节点信息的展示路径
|
//如果修改了名字,递归修改和该组织有关所有节点信息的展示路径
|
||||||
if (!optional.get().getName().equals(param.getName())) {
|
if (!optional.get().getName().equals(param.getName())) {
|
||||||
//修改名称
|
//修改名称
|
||||||
|
@ -126,22 +120,10 @@ public class OrganizationServiceImpl implements OrganizationService {
|
||||||
if (!entity.getLeaf()) {
|
if (!entity.getLeaf()) {
|
||||||
recursiveUpdateDisplayPath(entity.getId(), entity.getId(), param.getName());
|
recursiveUpdateDisplayPath(entity.getId(), entity.getId(), param.getName());
|
||||||
}
|
}
|
||||||
userIds = organizationRepository
|
|
||||||
.getOrgMemberList(organization.getId(), QUserEntity.userEntity.id).stream()
|
|
||||||
.map(String::valueOf).collect(Collectors.joining(","));
|
|
||||||
} else {
|
|
||||||
List<OrganizationMemberEntity> orgMemberList = organizationMemberRepository
|
|
||||||
.findAllByOrgId(entity.getId());
|
|
||||||
userIds = orgMemberList.stream().map(item -> String.valueOf(item.getUserId()))
|
|
||||||
.collect(Collectors.joining(","));
|
|
||||||
}
|
}
|
||||||
//修改
|
//修改
|
||||||
BeanUtils.merge(organization, entity, LAST_MODIFIED_BY, LAST_MODIFIED_TIME);
|
BeanUtils.merge(organization, entity, LAST_MODIFIED_BY, LAST_MODIFIED_TIME);
|
||||||
organizationRepository.save(entity);
|
organizationRepository.save(entity);
|
||||||
// 更新用户es信息
|
|
||||||
if (StringUtils.isNotBlank(userIds)) {
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, userIds);
|
|
||||||
}
|
|
||||||
AuditContext.setTarget(
|
AuditContext.setTarget(
|
||||||
Target.builder().id(entity.getId()).type(TargetType.ORGANIZATION).build());
|
Target.builder().id(entity.getId()).type(TargetType.ORGANIZATION).build());
|
||||||
return true;
|
return true;
|
||||||
|
@ -259,9 +241,7 @@ public class OrganizationServiceImpl implements OrganizationService {
|
||||||
@Override
|
@Override
|
||||||
public OrganizationResult getOrganization(String id) {
|
public OrganizationResult getOrganization(String id) {
|
||||||
Optional<OrganizationEntity> entity = organizationRepository.findById(id);
|
Optional<OrganizationEntity> entity = organizationRepository.findById(id);
|
||||||
OrganizationResult organizationResult = entity
|
return entity.map(organizationConverter::entityConvertToGetOrganizationResult).orElse(null);
|
||||||
.map(organizationConverter::entityConvertToGetOrganizationResult).orElse(null);
|
|
||||||
return organizationResult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -315,13 +295,6 @@ public class OrganizationServiceImpl implements OrganizationService {
|
||||||
.name(organization.get().getName()).build());
|
.name(organization.get().getName()).build());
|
||||||
//存在子组织,递归更改子组织 path 和 displayPath
|
//存在子组织,递归更改子组织 path 和 displayPath
|
||||||
recursiveUpdateChildNodePathAndDisplayPath(entity.getId());
|
recursiveUpdateChildNodePathAndDisplayPath(entity.getId());
|
||||||
// 更新用户es信息
|
|
||||||
String userIds = organizationRepository
|
|
||||||
.getOrgMemberList(entity.getId(), QUserEntity.userEntity.id).stream()
|
|
||||||
.map(String::valueOf).collect(Collectors.joining(","));
|
|
||||||
if (StringUtils.isNotBlank(userIds)) {
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, userIds);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -458,20 +431,11 @@ public class OrganizationServiceImpl implements OrganizationService {
|
||||||
/**
|
/**
|
||||||
* 组织架构数据映射器
|
* 组织架构数据映射器
|
||||||
*/
|
*/
|
||||||
private final OrganizationConverter organizationConverter;
|
private final OrganizationConverter organizationConverter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OrganizationRepository
|
* OrganizationRepository
|
||||||
*/
|
*/
|
||||||
private final OrganizationRepository organizationRepository;
|
private final OrganizationRepository organizationRepository;
|
||||||
|
|
||||||
/**
|
|
||||||
* MessagePublisher
|
|
||||||
*/
|
|
||||||
private final UserMessagePublisher userMessagePublisher;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OrganizationMemberRepository
|
|
||||||
*/
|
|
||||||
private final OrganizationMemberRepository organizationMemberRepository;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,12 +21,10 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
import org.springframework.data.querydsl.QPageRequest;
|
import org.springframework.data.querydsl.QPageRequest;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.querydsl.core.types.ExpressionUtils;
|
import com.querydsl.core.types.ExpressionUtils;
|
||||||
|
@ -49,8 +47,6 @@ import cn.topiam.employee.console.pojo.result.account.UserGroupMemberListResult;
|
||||||
import cn.topiam.employee.console.pojo.save.account.UserGroupCreateParam;
|
import cn.topiam.employee.console.pojo.save.account.UserGroupCreateParam;
|
||||||
import cn.topiam.employee.console.pojo.update.account.UserGroupUpdateParam;
|
import cn.topiam.employee.console.pojo.update.account.UserGroupUpdateParam;
|
||||||
import cn.topiam.employee.console.service.account.UserGroupService;
|
import cn.topiam.employee.console.service.account.UserGroupService;
|
||||||
import cn.topiam.employee.core.mq.UserMessagePublisher;
|
|
||||||
import cn.topiam.employee.core.mq.UserMessageTag;
|
|
||||||
import cn.topiam.employee.support.exception.TopIamException;
|
import cn.topiam.employee.support.exception.TopIamException;
|
||||||
import cn.topiam.employee.support.repository.page.domain.Page;
|
import cn.topiam.employee.support.repository.page.domain.Page;
|
||||||
import cn.topiam.employee.support.repository.page.domain.PageModel;
|
import cn.topiam.employee.support.repository.page.domain.PageModel;
|
||||||
|
@ -118,14 +114,6 @@ public class UserGroupServiceImpl implements UserGroupService {
|
||||||
UserGroupEntity details = getUserGroup(Long.valueOf(param.getId()));
|
UserGroupEntity details = getUserGroup(Long.valueOf(param.getId()));
|
||||||
BeanUtils.merge(entity, details, LAST_MODIFIED_TIME, LAST_MODIFIED_BY);
|
BeanUtils.merge(entity, details, LAST_MODIFIED_TIME, LAST_MODIFIED_BY);
|
||||||
userGroupRepository.save(details);
|
userGroupRepository.save(details);
|
||||||
// 更新用户es信息
|
|
||||||
List<UserGroupMemberEntity> userGroupMemberList = userGroupMemberRepository
|
|
||||||
.findByGroupId(details.getId());
|
|
||||||
if (!CollectionUtils.isEmpty(userGroupMemberList)) {
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE,
|
|
||||||
userGroupMemberList.stream().map(item -> String.valueOf(item.getUserId()))
|
|
||||||
.collect(Collectors.joining(",")));
|
|
||||||
}
|
|
||||||
AuditContext.setTarget(
|
AuditContext.setTarget(
|
||||||
Target.builder().id(details.getId().toString()).type(TargetType.USER_GROUP).build());
|
Target.builder().id(details.getId().toString()).type(TargetType.USER_GROUP).build());
|
||||||
return true;
|
return true;
|
||||||
|
@ -183,8 +171,6 @@ public class UserGroupServiceImpl implements UserGroupService {
|
||||||
public Boolean removeMember(String id, String userId) {
|
public Boolean removeMember(String id, String userId) {
|
||||||
//查询关联关系
|
//查询关联关系
|
||||||
userGroupMemberRepository.deleteByGroupIdAndUserId(Long.valueOf(id), Long.valueOf(userId));
|
userGroupMemberRepository.deleteByGroupIdAndUserId(Long.valueOf(id), Long.valueOf(userId));
|
||||||
// 更新用户es用户组信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, userId);
|
|
||||||
AuditContext.setTarget(Target.builder().id(userId).type(TargetType.USER).build(),
|
AuditContext.setTarget(Target.builder().id(userId).type(TargetType.USER).build(),
|
||||||
Target.builder().id(id).type(TargetType.USER_GROUP).build());
|
Target.builder().id(id).type(TargetType.USER_GROUP).build());
|
||||||
return true;
|
return true;
|
||||||
|
@ -215,8 +201,6 @@ public class UserGroupServiceImpl implements UserGroupService {
|
||||||
});
|
});
|
||||||
//添加
|
//添加
|
||||||
userGroupMemberRepository.saveAll(list);
|
userGroupMemberRepository.saveAll(list);
|
||||||
// 更新用户es用户组信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, String.join(",", userIds));
|
|
||||||
List<Target> targets = new ArrayList<>(Arrays.stream(userIds)
|
List<Target> targets = new ArrayList<>(Arrays.stream(userIds)
|
||||||
.map(i -> Target.builder().id(i).type(TargetType.USER).build()).toList());
|
.map(i -> Target.builder().id(i).type(TargetType.USER).build()).toList());
|
||||||
|
|
||||||
|
@ -254,8 +238,6 @@ public class UserGroupServiceImpl implements UserGroupService {
|
||||||
}
|
}
|
||||||
userIds.forEach(userId -> userGroupMemberRepository
|
userIds.forEach(userId -> userGroupMemberRepository
|
||||||
.deleteByGroupIdAndUserId(Long.valueOf(id), Long.valueOf(userId)));
|
.deleteByGroupIdAndUserId(Long.valueOf(id), Long.valueOf(userId)));
|
||||||
// 更新用户es用户组信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, String.join(",", userIds));
|
|
||||||
List<Target> targets = new ArrayList<>(userIds.stream()
|
List<Target> targets = new ArrayList<>(userIds.stream()
|
||||||
.map(i -> Target.builder().id(i).type(TargetType.USER).build()).toList());
|
.map(i -> Target.builder().id(i).type(TargetType.USER).build()).toList());
|
||||||
|
|
||||||
|
@ -301,9 +283,4 @@ public class UserGroupServiceImpl implements UserGroupService {
|
||||||
* UserGroupMemberRepository
|
* UserGroupMemberRepository
|
||||||
*/
|
*/
|
||||||
private final UserGroupMemberRepository userGroupMemberRepository;
|
private final UserGroupMemberRepository userGroupMemberRepository;
|
||||||
|
|
||||||
/**
|
|
||||||
* MessagePublisher
|
|
||||||
*/
|
|
||||||
private final UserMessagePublisher userMessagePublisher;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,8 +61,6 @@ import cn.topiam.employee.console.service.account.UserService;
|
||||||
import cn.topiam.employee.core.message.MsgVariable;
|
import cn.topiam.employee.core.message.MsgVariable;
|
||||||
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
||||||
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
||||||
import cn.topiam.employee.core.mq.UserMessagePublisher;
|
|
||||||
import cn.topiam.employee.core.mq.UserMessageTag;
|
|
||||||
import cn.topiam.employee.support.autoconfiguration.SupportProperties;
|
import cn.topiam.employee.support.autoconfiguration.SupportProperties;
|
||||||
import cn.topiam.employee.support.exception.BadParamsException;
|
import cn.topiam.employee.support.exception.BadParamsException;
|
||||||
import cn.topiam.employee.support.exception.InfoValidityFailException;
|
import cn.topiam.employee.support.exception.InfoValidityFailException;
|
||||||
|
@ -200,12 +198,7 @@ public class UserServiceImpl implements UserService {
|
||||||
throw new TopIamException(AuditContext.getContent());
|
throw new TopIamException(AuditContext.getContent());
|
||||||
}
|
}
|
||||||
AuditContext.setTarget(Target.builder().id(id.toString()).type(TargetType.USER).build());
|
AuditContext.setTarget(Target.builder().id(id.toString()).type(TargetType.USER).build());
|
||||||
boolean update = userRepository.updateUserStatus(id, status) > 0;
|
return userRepository.updateUserStatus(id, status) > 0;
|
||||||
if (update) {
|
|
||||||
// 更新索引数据
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, String.valueOf(id));
|
|
||||||
}
|
|
||||||
return update;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -258,9 +251,6 @@ public class UserServiceImpl implements UserService {
|
||||||
organizationMemberRepository.save(member);
|
organizationMemberRepository.save(member);
|
||||||
AuditContext.setTarget(Target.builder().type(USER).id(user.getId().toString()).build(),
|
AuditContext.setTarget(Target.builder().type(USER).id(user.getId().toString()).build(),
|
||||||
Target.builder().type(USER_DETAIL).id(detail.getId().toString()).build());
|
Target.builder().type(USER_DETAIL).id(detail.getId().toString()).build());
|
||||||
// 保存ES用户信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE,
|
|
||||||
String.valueOf(user.getId()));
|
|
||||||
// 发送短信和邮件的欢迎信息(密码通知)
|
// 发送短信和邮件的欢迎信息(密码通知)
|
||||||
UserCreateParam.PasswordInitializeConfig passwordInitializeConfig = param
|
UserCreateParam.PasswordInitializeConfig passwordInitializeConfig = param
|
||||||
.getPasswordInitializeConfig();
|
.getPasswordInitializeConfig();
|
||||||
|
@ -369,9 +359,6 @@ public class UserServiceImpl implements UserService {
|
||||||
userDetailsRepository.save(detail);
|
userDetailsRepository.save(detail);
|
||||||
AuditContext.setTarget(Target.builder().type(USER).id(user.getId().toString()).build(),
|
AuditContext.setTarget(Target.builder().type(USER).id(user.getId().toString()).build(),
|
||||||
Target.builder().type(USER_DETAIL).id(detail.getId().toString()).build());
|
Target.builder().type(USER_DETAIL).id(detail.getId().toString()).build());
|
||||||
// 更新ES用户信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE,
|
|
||||||
String.valueOf(user.getId()));
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -400,8 +387,6 @@ public class UserServiceImpl implements UserService {
|
||||||
//删除用户组用户详情
|
//删除用户组用户详情
|
||||||
userGroupMemberRepository.deleteByUserId(Long.valueOf(id));
|
userGroupMemberRepository.deleteByUserId(Long.valueOf(id));
|
||||||
AuditContext.setTarget(Target.builder().id(id).type(TargetType.USER).build());
|
AuditContext.setTarget(Target.builder().id(id).type(TargetType.USER).build());
|
||||||
// 删除ES用户信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.DELETE, id);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -445,8 +430,6 @@ public class UserServiceImpl implements UserService {
|
||||||
organizationMemberRepository.deleteAllByUserId(idList);
|
organizationMemberRepository.deleteAllByUserId(idList);
|
||||||
//删除用户组关系
|
//删除用户组关系
|
||||||
userGroupMemberRepository.deleteAllByUserId(idList);
|
userGroupMemberRepository.deleteAllByUserId(idList);
|
||||||
// 批量删除ES用户信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.DELETE, String.join(",", ids));
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -614,8 +597,4 @@ public class UserServiceImpl implements UserService {
|
||||||
*/
|
*/
|
||||||
private final PasswordPolicyManager<UserEntity> passwordPolicyManager;
|
private final PasswordPolicyManager<UserEntity> passwordPolicyManager;
|
||||||
|
|
||||||
/**
|
|
||||||
* MessagePublisher
|
|
||||||
*/
|
|
||||||
private final UserMessagePublisher userMessagePublisher;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,8 +55,6 @@ import cn.topiam.employee.common.repository.identitysource.IdentitySourceSyncRec
|
||||||
import cn.topiam.employee.common.storage.Storage;
|
import cn.topiam.employee.common.storage.Storage;
|
||||||
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
||||||
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
||||||
import cn.topiam.employee.core.mq.UserMessagePublisher;
|
|
||||||
import cn.topiam.employee.core.mq.UserMessageTag;
|
|
||||||
import cn.topiam.employee.identitysource.core.domain.Dept;
|
import cn.topiam.employee.identitysource.core.domain.Dept;
|
||||||
import cn.topiam.employee.identitysource.core.domain.User;
|
import cn.topiam.employee.identitysource.core.domain.User;
|
||||||
import cn.topiam.employee.identitysource.core.enums.IdentitySourceEventReceiveType;
|
import cn.topiam.employee.identitysource.core.enums.IdentitySourceEventReceiveType;
|
||||||
|
@ -133,7 +131,6 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
List<IdentitySourceEventRecordEntity> records = new ArrayList<>();
|
List<IdentitySourceEventRecordEntity> records = new ArrayList<>();
|
||||||
List<UserEntity> createUsers = new ArrayList<>();
|
List<UserEntity> createUsers = new ArrayList<>();
|
||||||
Set<OrganizationMemberEntity> createOrganizationMembers = Sets.newHashSet();
|
Set<OrganizationMemberEntity> createOrganizationMembers = Sets.newHashSet();
|
||||||
List<String> batchEsUserIdList = new ArrayList<>();
|
|
||||||
users.forEach(thirdPartyUser -> {
|
users.forEach(thirdPartyUser -> {
|
||||||
log.info("处理上游用户新增事件:[{}]开始", thirdPartyUser.getUserId());
|
log.info("处理上游用户新增事件:[{}]开始", thirdPartyUser.getUserId());
|
||||||
UserEntity userEntity = thirdPartyUserToUserEntity(thirdPartyUser, identitySource);
|
UserEntity userEntity = thirdPartyUserToUserEntity(thirdPartyUser, identitySource);
|
||||||
|
@ -149,7 +146,6 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
userEntity.getId());
|
userEntity.getId());
|
||||||
createOrganizationMember(createOrganizationMembers, userEntity, organization);
|
createOrganizationMember(createOrganizationMembers, userEntity, organization);
|
||||||
});
|
});
|
||||||
batchEsUserIdList.add(String.valueOf(userEntity.getId()));
|
|
||||||
//记录日志
|
//记录日志
|
||||||
IdentitySourceEventRecordEntity record = new IdentitySourceEventRecordEntity();
|
IdentitySourceEventRecordEntity record = new IdentitySourceEventRecordEntity();
|
||||||
record.setObjectId(userEntity.getId().toString());
|
record.setObjectId(userEntity.getId().toString());
|
||||||
|
@ -174,9 +170,6 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
organizationMemberRepository.batchSave(Lists.newArrayList(createOrganizationMembers));
|
organizationMemberRepository.batchSave(Lists.newArrayList(createOrganizationMembers));
|
||||||
//保存事件记录
|
//保存事件记录
|
||||||
identitySourceEventRecordRepository.batchSave(records);
|
identitySourceEventRecordRepository.batchSave(records);
|
||||||
// 异步创建ES用户数据
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE,
|
|
||||||
String.join(",", batchEsUserIdList));
|
|
||||||
// 批量发送短信邮件欢迎信息(密码通知)
|
// 批量发送短信邮件欢迎信息(密码通知)
|
||||||
publishMessage(createUsers);
|
publishMessage(createUsers);
|
||||||
}
|
}
|
||||||
|
@ -192,7 +185,6 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
List<IdentitySourceEventRecordEntity> records = new ArrayList<>();
|
List<IdentitySourceEventRecordEntity> records = new ArrayList<>();
|
||||||
List<UserEntity> updateUsers = new ArrayList<>();
|
List<UserEntity> updateUsers = new ArrayList<>();
|
||||||
List<OrganizationMemberEntity> createOrganizationMembers = new ArrayList<>();
|
List<OrganizationMemberEntity> createOrganizationMembers = new ArrayList<>();
|
||||||
List<String> batchEsUserIdList = new ArrayList<>();
|
|
||||||
//需要删除组织成员关系集合 KEY:用户ID,value:组织ID
|
//需要删除组织成员关系集合 KEY:用户ID,value:组织ID
|
||||||
Map<Long, Set<String>> deleteOrganizationMembers = Maps.newHashMap();
|
Map<Long, Set<String>> deleteOrganizationMembers = Maps.newHashMap();
|
||||||
Map<UserEntity, Set<OrganizationEntity>> currentUsers = Maps.newHashMap();
|
Map<UserEntity, Set<OrganizationEntity>> currentUsers = Maps.newHashMap();
|
||||||
|
@ -252,9 +244,6 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
record.setUpdateBy(SYSTEM_DEFAULT_USER_NAME);
|
record.setUpdateBy(SYSTEM_DEFAULT_USER_NAME);
|
||||||
record.setUpdateTime(LocalDateTime.now());
|
record.setUpdateTime(LocalDateTime.now());
|
||||||
records.add(record);
|
records.add(record);
|
||||||
|
|
||||||
// 构建ES用户Id信息
|
|
||||||
batchEsUserIdList.add(String.valueOf(currentUser.getId()));
|
|
||||||
log.info("处理上游用户修改事件:[{}]结束", thirdPartyUser.getUserId());
|
log.info("处理上游用户修改事件:[{}]结束", thirdPartyUser.getUserId());
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
@ -267,8 +256,6 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
.forEach(user -> deleteOrganizationMembers.get(user)
|
.forEach(user -> deleteOrganizationMembers.get(user)
|
||||||
.forEach(organization -> organizationMemberRepository
|
.forEach(organization -> organizationMemberRepository
|
||||||
.deleteByOrgIdAndUserId(organization, user)));
|
.deleteByOrgIdAndUserId(organization, user)));
|
||||||
// 异步更新ES用户数据
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, String.join(",", batchEsUserIdList));
|
|
||||||
//保存事件记录
|
//保存事件记录
|
||||||
identitySourceEventRecordRepository.batchSave(records);
|
identitySourceEventRecordRepository.batchSave(records);
|
||||||
//@formatter:on
|
//@formatter:on
|
||||||
|
@ -398,7 +385,6 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
//根据外部ID查询
|
//根据外部ID查询
|
||||||
List<OrganizationEntity> list = organizationRepository
|
List<OrganizationEntity> list = organizationRepository
|
||||||
.findByExternalIdIn(organizations.stream().map(Dept::getDeptId).toList());
|
.findByExternalIdIn(organizations.stream().map(Dept::getDeptId).toList());
|
||||||
List<String> userIds = new ArrayList<>();
|
|
||||||
list.forEach(current -> organizations.forEach(threeParty -> {
|
list.forEach(current -> organizations.forEach(threeParty -> {
|
||||||
//当前三方ID和上游科室对应
|
//当前三方ID和上游科室对应
|
||||||
if (current.getExternalId().equals(threeParty.getDeptId())) {
|
if (current.getExternalId().equals(threeParty.getDeptId())) {
|
||||||
|
@ -434,20 +420,10 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
if (subOrganizations.stream().map(i -> i.getId().equals(current.getId()))
|
if (subOrganizations.stream().map(i -> i.getId().equals(current.getId()))
|
||||||
.findAny().isEmpty()) {
|
.findAny().isEmpty()) {
|
||||||
organizationRepository.updateIsLeaf(parentOrganization.getId(), true);
|
organizationRepository.updateIsLeaf(parentOrganization.getId(), true);
|
||||||
// 查询关联用户
|
|
||||||
List<OrganizationMemberEntity> orgMemberList = organizationMemberRepository
|
|
||||||
.findAllByOrgId(parentOrganization.getId());
|
|
||||||
userIds.addAll(orgMemberList.stream()
|
|
||||||
.map(item -> String.valueOf(item.getUserId())).toList());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (parentOrganization.getLeaf()) {
|
if (parentOrganization.getLeaf()) {
|
||||||
organizationRepository.updateIsLeaf(parentOrganization.getId(), false);
|
organizationRepository.updateIsLeaf(parentOrganization.getId(), false);
|
||||||
// 查询关联用户
|
|
||||||
List<OrganizationMemberEntity> orgMemberList = organizationMemberRepository
|
|
||||||
.findAllByOrgId(parentOrganization.getId());
|
|
||||||
userIds.addAll(orgMemberList.stream()
|
|
||||||
.map(item -> String.valueOf(item.getUserId())).toList());
|
|
||||||
}
|
}
|
||||||
//修改基本信息
|
//修改基本信息
|
||||||
current.setName(threeParty.getName());
|
current.setName(threeParty.getName());
|
||||||
|
@ -469,17 +445,10 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
record.setUpdateBy(SYSTEM_DEFAULT_USER_NAME);
|
record.setUpdateBy(SYSTEM_DEFAULT_USER_NAME);
|
||||||
record.setUpdateTime(LocalDateTime.now());
|
record.setUpdateTime(LocalDateTime.now());
|
||||||
records.add(record);
|
records.add(record);
|
||||||
// 查询关联用户
|
|
||||||
List<OrganizationMemberEntity> orgMemberList = organizationMemberRepository
|
|
||||||
.findAllByOrgId(current.getId());
|
|
||||||
userIds.addAll(
|
|
||||||
orgMemberList.stream().map(item -> String.valueOf(item.getUserId())).toList());
|
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
//批量保存部门信息
|
//批量保存部门信息
|
||||||
organizationRepository.batchUpdate(updateOrganizations);
|
organizationRepository.batchUpdate(updateOrganizations);
|
||||||
// 更新es用户信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, String.join(",", userIds));
|
|
||||||
//保存事件记录
|
//保存事件记录
|
||||||
identitySourceEventRecordRepository.batchSave(records);
|
identitySourceEventRecordRepository.batchSave(records);
|
||||||
}
|
}
|
||||||
|
@ -554,11 +523,6 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
*/
|
*/
|
||||||
private final IdentitySourceEventRecordRepository identitySourceEventRecordRepository;
|
private final IdentitySourceEventRecordRepository identitySourceEventRecordRepository;
|
||||||
|
|
||||||
/**
|
|
||||||
* MessagePublisher
|
|
||||||
*/
|
|
||||||
private final UserMessagePublisher userMessagePublisher;
|
|
||||||
|
|
||||||
public DefaultIdentitySourceEventPostProcessor(SmsMsgEventPublish smsMsgEventPublish,
|
public DefaultIdentitySourceEventPostProcessor(SmsMsgEventPublish smsMsgEventPublish,
|
||||||
MailMsgEventPublish mailMsgEventPublish,
|
MailMsgEventPublish mailMsgEventPublish,
|
||||||
PasswordEncoder passwordEncoder,
|
PasswordEncoder passwordEncoder,
|
||||||
|
@ -573,8 +537,7 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
OrganizationRepository organizationRepository,
|
OrganizationRepository organizationRepository,
|
||||||
OrganizationMemberRepository organizationMemberRepository,
|
OrganizationMemberRepository organizationMemberRepository,
|
||||||
IdentitySourceEventRecordRepository identitySourceEventRecordRepository,
|
IdentitySourceEventRecordRepository identitySourceEventRecordRepository,
|
||||||
Storage storage,
|
Storage storage) {
|
||||||
UserMessagePublisher userMessagePublisher) {
|
|
||||||
super(smsMsgEventPublish, mailMsgEventPublish, passwordEncoder, passwordGenerator,
|
super(smsMsgEventPublish, mailMsgEventPublish, passwordEncoder, passwordGenerator,
|
||||||
transactionDefinition, platformTransactionManager, entityManager,
|
transactionDefinition, platformTransactionManager, entityManager,
|
||||||
identitySourceRepository, identitySourceSyncHistoryRepository,
|
identitySourceRepository, identitySourceSyncHistoryRepository,
|
||||||
|
@ -583,6 +546,5 @@ public class DefaultIdentitySourceEventPostProcessor extends AbstractIdentitySou
|
||||||
this.organizationRepository = organizationRepository;
|
this.organizationRepository = organizationRepository;
|
||||||
this.organizationMemberRepository = organizationMemberRepository;
|
this.organizationMemberRepository = organizationMemberRepository;
|
||||||
this.identitySourceEventRecordRepository = identitySourceEventRecordRepository;
|
this.identitySourceEventRecordRepository = identitySourceEventRecordRepository;
|
||||||
this.userMessagePublisher = userMessagePublisher;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
@ -54,8 +53,6 @@ import cn.topiam.employee.common.repository.identitysource.IdentitySourceSyncRec
|
||||||
import cn.topiam.employee.common.storage.Storage;
|
import cn.topiam.employee.common.storage.Storage;
|
||||||
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
||||||
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
||||||
import cn.topiam.employee.core.mq.UserMessagePublisher;
|
|
||||||
import cn.topiam.employee.core.mq.UserMessageTag;
|
|
||||||
import cn.topiam.employee.identitysource.core.domain.User;
|
import cn.topiam.employee.identitysource.core.domain.User;
|
||||||
import cn.topiam.employee.identitysource.core.processor.IdentitySourceSyncUserPostProcessor;
|
import cn.topiam.employee.identitysource.core.processor.IdentitySourceSyncUserPostProcessor;
|
||||||
import cn.topiam.employee.support.repository.domain.IdEntity;
|
import cn.topiam.employee.support.repository.domain.IdEntity;
|
||||||
|
@ -100,19 +97,14 @@ public class DefaultIdentitySourceUserPostProcessor extends AbstractIdentitySour
|
||||||
processData = processData(identitySource, initData);
|
processData = processData(identitySource, initData);
|
||||||
//校验数据
|
//校验数据
|
||||||
validateData(processData);
|
validateData(processData);
|
||||||
String batchEsUserId = "";
|
|
||||||
//批量保存用户
|
//批量保存用户
|
||||||
if (!CollectionUtils.isEmpty(processData.getCreateUsers())) {
|
if (!CollectionUtils.isEmpty(processData.getCreateUsers())) {
|
||||||
List<UserEntity> createUserList = Lists.newArrayList(processData.getCreateUsers());
|
List<UserEntity> createUserList = Lists.newArrayList(processData.getCreateUsers());
|
||||||
batchEsUserId += createUserList.stream().map(user -> String.valueOf(user.getId()))
|
|
||||||
.collect(Collectors.joining(","));
|
|
||||||
userRepository.batchSave(createUserList);
|
userRepository.batchSave(createUserList);
|
||||||
}
|
}
|
||||||
//批量更新用户
|
//批量更新用户
|
||||||
if (!CollectionUtils.isEmpty(processData.getUpdateUsers())) {
|
if (!CollectionUtils.isEmpty(processData.getUpdateUsers())) {
|
||||||
List<UserEntity> updateUserList = Lists.newArrayList(processData.getUpdateUsers());
|
List<UserEntity> updateUserList = Lists.newArrayList(processData.getUpdateUsers());
|
||||||
batchEsUserId += updateUserList.stream().map(user -> String.valueOf(user.getId()))
|
|
||||||
.collect(Collectors.joining(","));
|
|
||||||
userRepository.batchUpdate(updateUserList);
|
userRepository.batchUpdate(updateUserList);
|
||||||
}
|
}
|
||||||
//保存组织成员关系
|
//保存组织成员关系
|
||||||
|
@ -148,13 +140,6 @@ public class DefaultIdentitySourceUserPostProcessor extends AbstractIdentitySour
|
||||||
saveSyncHistoryRecord(history.getId(), processData);
|
saveSyncHistoryRecord(history.getId(), processData);
|
||||||
//提交事务
|
//提交事务
|
||||||
platformTransactionManager.commit(transactionStatus);
|
platformTransactionManager.commit(transactionStatus);
|
||||||
// 异步更新ES用户数据
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, batchEsUserId);
|
|
||||||
// 异步删除用户ES数据
|
|
||||||
if (!CollectionUtils.isEmpty(processData.getDeleteUsers())) {
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.DELETE,
|
|
||||||
deleteUserIds.stream().map(String::valueOf).collect(Collectors.joining(",")));
|
|
||||||
}
|
|
||||||
if (!CollectionUtils.isEmpty(processData.getCreateUsers())) {
|
if (!CollectionUtils.isEmpty(processData.getCreateUsers())) {
|
||||||
// 发送密码通知
|
// 发送密码通知
|
||||||
publishMessage(Lists.newArrayList(processData.getCreateUsers()));
|
publishMessage(Lists.newArrayList(processData.getCreateUsers()));
|
||||||
|
@ -734,11 +719,6 @@ public class DefaultIdentitySourceUserPostProcessor extends AbstractIdentitySour
|
||||||
*/
|
*/
|
||||||
private final UserGroupMemberRepository userGroupMemberRepository;
|
private final UserGroupMemberRepository userGroupMemberRepository;
|
||||||
|
|
||||||
/**
|
|
||||||
* MessagePublisher
|
|
||||||
*/
|
|
||||||
private final UserMessagePublisher userMessagePublisher;
|
|
||||||
|
|
||||||
public DefaultIdentitySourceUserPostProcessor(SmsMsgEventPublish smsMsgEventPublish,
|
public DefaultIdentitySourceUserPostProcessor(SmsMsgEventPublish smsMsgEventPublish,
|
||||||
MailMsgEventPublish mailMsgEventPublish,
|
MailMsgEventPublish mailMsgEventPublish,
|
||||||
TransactionDefinition transactionDefinition,
|
TransactionDefinition transactionDefinition,
|
||||||
|
@ -754,8 +734,7 @@ public class DefaultIdentitySourceUserPostProcessor extends AbstractIdentitySour
|
||||||
OrganizationMemberRepository organizationMemberRepository,
|
OrganizationMemberRepository organizationMemberRepository,
|
||||||
UserGroupMemberRepository userGroupMemberRepository,
|
UserGroupMemberRepository userGroupMemberRepository,
|
||||||
OrganizationRepository organizationRepository,
|
OrganizationRepository organizationRepository,
|
||||||
Storage storage,
|
Storage storage) {
|
||||||
UserMessagePublisher userMessagePublisher) {
|
|
||||||
super(smsMsgEventPublish, mailMsgEventPublish, passwordEncoder, passwordGenerator,
|
super(smsMsgEventPublish, mailMsgEventPublish, passwordEncoder, passwordGenerator,
|
||||||
transactionDefinition, platformTransactionManager, entityManager,
|
transactionDefinition, platformTransactionManager, entityManager,
|
||||||
identitySourceRepository, identitySourceSyncHistoryRepository,
|
identitySourceRepository, identitySourceSyncHistoryRepository,
|
||||||
|
@ -765,6 +744,5 @@ public class DefaultIdentitySourceUserPostProcessor extends AbstractIdentitySour
|
||||||
this.organizationMemberRepository = organizationMemberRepository;
|
this.organizationMemberRepository = organizationMemberRepository;
|
||||||
this.userGroupMemberRepository = userGroupMemberRepository;
|
this.userGroupMemberRepository = userGroupMemberRepository;
|
||||||
this.organizationRepository = organizationRepository;
|
this.organizationRepository = organizationRepository;
|
||||||
this.userMessagePublisher = userMessagePublisher;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* eiam-core - Employee Identity and Access Management
|
* eiam-core - Employee Identity and Access Management Program
|
||||||
* Copyright © 2022-Present Jinan Yuanchuang Network Technology Co., Ltd. (support@topiam.cn)
|
* Copyright © 2020-2023 TopIAM (support@topiam.cn)
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Affero General Public License as published by
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
@ -19,36 +19,23 @@ package cn.topiam.employee.core.security.password.task.impl;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import cn.topiam.employee.common.entity.account.UserEntity;
|
||||||
|
|
||||||
import cn.topiam.employee.common.entity.account.UserElasticSearchEntity;
|
|
||||||
import cn.topiam.employee.common.entity.setting.SettingEntity;
|
import cn.topiam.employee.common.entity.setting.SettingEntity;
|
||||||
import cn.topiam.employee.common.enums.UserStatus;
|
import cn.topiam.employee.common.enums.UserStatus;
|
||||||
import cn.topiam.employee.common.repository.account.UserRepository;
|
import cn.topiam.employee.common.repository.account.UserRepository;
|
||||||
import cn.topiam.employee.common.repository.setting.SettingRepository;
|
import cn.topiam.employee.common.repository.setting.SettingRepository;
|
||||||
import cn.topiam.employee.core.mq.UserMessagePublisher;
|
|
||||||
import cn.topiam.employee.core.mq.UserMessageTag;
|
|
||||||
import cn.topiam.employee.core.security.password.task.PasswordExpireTask;
|
import cn.topiam.employee.core.security.password.task.PasswordExpireTask;
|
||||||
import cn.topiam.employee.support.autoconfiguration.SupportProperties;
|
|
||||||
import cn.topiam.employee.support.lock.Lock;
|
|
||||||
import cn.topiam.employee.support.trace.Trace;
|
import cn.topiam.employee.support.trace.Trace;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
import co.elastic.clients.elasticsearch._types.FieldValue;
|
|
||||||
import co.elastic.clients.elasticsearch._types.query_dsl.Query;
|
|
||||||
import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
|
|
||||||
import co.elastic.clients.elasticsearch._types.query_dsl.TermsQueryField;
|
|
||||||
import static cn.topiam.employee.core.setting.constant.PasswordPolicySettingConstants.PASSWORD_POLICY_DEFAULT_SETTINGS;
|
import static cn.topiam.employee.core.setting.constant.PasswordPolicySettingConstants.PASSWORD_POLICY_DEFAULT_SETTINGS;
|
||||||
import static cn.topiam.employee.core.setting.constant.PasswordPolicySettingConstants.PASSWORD_POLICY_VALID_DAYS;
|
import static cn.topiam.employee.core.setting.constant.PasswordPolicySettingConstants.PASSWORD_POLICY_VALID_DAYS;
|
||||||
|
|
||||||
|
@ -66,48 +53,30 @@ public class PasswordExpireLockTask implements PasswordExpireTask {
|
||||||
/**
|
/**
|
||||||
* 锁定密码过期用户
|
* 锁定密码过期用户
|
||||||
*/
|
*/
|
||||||
@Lock(throwException = false)
|
|
||||||
@Trace
|
@Trace
|
||||||
@Scheduled(cron = "0 0 0 * * ?")
|
@Scheduled(cron = "0 0 0 * * ?")
|
||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
long start = System.currentTimeMillis();
|
|
||||||
logger.info("密码过期锁定用户任务开始");
|
logger.info("密码过期锁定用户任务开始");
|
||||||
int expireDays = getExpireDays();
|
int expireDays = getExpireDays();
|
||||||
// 查询非密码过期锁定和过期锁定用户信息
|
//1、根据提醒时间,分页查询即将要过期的密码
|
||||||
Query query = QueryBuilders.terms(builder -> {
|
List<UserEntity> list = userRepository.findPasswordExpireUser(expireDays);
|
||||||
builder.terms(new TermsQueryField.Builder().value(
|
Iterator<UserEntity> iterator = list.iterator();
|
||||||
Lists.newArrayList(FieldValue.of(UserStatus.PASSWORD_EXPIRED_LOCKED.getCode()),
|
logger.info("密码过期待锁定用户数量为:{}个", list.size());
|
||||||
FieldValue.of(UserStatus.EXPIRED_LOCKED.getCode())))
|
while (!list.isEmpty()) {
|
||||||
.build());
|
UserEntity entity = iterator.next();
|
||||||
builder.field("status");
|
|
||||||
return builder;
|
|
||||||
});
|
|
||||||
List<UserElasticSearchEntity> userElasticSearchList = userRepository
|
|
||||||
.getAllUserElasticSearchEntity(
|
|
||||||
IndexCoordinates.of(supportProperties.getUser().getIndexPrefix()), query);
|
|
||||||
List<String> lockedUserIdList = new ArrayList<>();
|
|
||||||
Iterator<UserElasticSearchEntity> iterator = userElasticSearchList.iterator();
|
|
||||||
logger.info("密码过期待锁定用户数量为:{}个", userElasticSearchList.size());
|
|
||||||
while (!userElasticSearchList.isEmpty()) {
|
|
||||||
UserElasticSearchEntity entity = iterator.next();
|
|
||||||
//获取到期日期
|
//获取到期日期
|
||||||
LocalDateTime expiredDate = entity.getLastUpdatePasswordTime().atOffset(ZoneOffset.MAX)
|
LocalDateTime expiredDate = entity.getLastUpdatePasswordTime().atOffset(ZoneOffset.MAX)
|
||||||
.plusDays(expireDays).toLocalDateTime();
|
.plusDays(expireDays).toLocalDateTime();
|
||||||
if (LocalDateTime.now().isBefore(expiredDate)) {
|
if (LocalDateTime.now().isBefore(expiredDate)) {
|
||||||
lockedUserIdList.add(entity.getId());
|
entity.setStatus(UserStatus.PASSWORD_EXPIRED_LOCKED);
|
||||||
userRepository.updateUserStatus(Long.valueOf(entity.getId()),
|
userRepository.save(entity);
|
||||||
UserStatus.PASSWORD_EXPIRED_LOCKED);
|
logger.info("锁定密码过期用户:{}", entity.getUsername());
|
||||||
logger.info("锁定密码过期用户:{}", entity.getUsername());
|
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
}
|
}
|
||||||
iterator = userElasticSearchList.iterator();
|
iterator = list.iterator();
|
||||||
}
|
}
|
||||||
// 推送es用户消息
|
logger.info("密码过期锁定用户任务结束");
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE,
|
|
||||||
String.join(",", lockedUserIdList));
|
|
||||||
logger.info("密码过期锁定用户任务结束: 冻结用户数量[{}], 耗时:[{}]s", lockedUserIdList.size(),
|
|
||||||
(System.currentTimeMillis() - start) / 1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -126,21 +95,11 @@ public class PasswordExpireLockTask implements PasswordExpireTask {
|
||||||
/**
|
/**
|
||||||
* 设置
|
* 设置
|
||||||
*/
|
*/
|
||||||
private final SettingRepository settingRepository;
|
private final SettingRepository settingRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UserRepository
|
* UserRepository
|
||||||
*/
|
*/
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
|
|
||||||
/**
|
|
||||||
* SupportProperties
|
|
||||||
*/
|
|
||||||
private final SupportProperties supportProperties;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UserMessagePublisher
|
|
||||||
*/
|
|
||||||
private final UserMessagePublisher userMessagePublisher;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* eiam-core - Employee Identity and Access Management
|
* eiam-core - Employee Identity and Access Management Program
|
||||||
* Copyright © 2022-Present Jinan Yuanchuang Network Technology Co., Ltd. (support@topiam.cn)
|
* Copyright © 2020-2023 TopIAM (support@topiam.cn)
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Affero General Public License as published by
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
@ -19,7 +19,6 @@ package cn.topiam.employee.core.security.password.task.impl;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalTime;
|
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
@ -29,29 +28,22 @@ import java.util.Objects;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
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.data.elasticsearch.client.elc.Queries;
|
|
||||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
|
|
||||||
import cn.topiam.employee.common.entity.account.UserElasticSearchEntity;
|
import cn.topiam.employee.common.entity.account.UserEntity;
|
||||||
import cn.topiam.employee.common.entity.setting.SettingEntity;
|
import cn.topiam.employee.common.entity.setting.SettingEntity;
|
||||||
import cn.topiam.employee.common.enums.MailType;
|
import cn.topiam.employee.common.enums.MailType;
|
||||||
import cn.topiam.employee.common.enums.SmsType;
|
import cn.topiam.employee.common.enums.SmsType;
|
||||||
import cn.topiam.employee.common.enums.UserStatus;
|
|
||||||
import cn.topiam.employee.common.repository.account.UserRepository;
|
import cn.topiam.employee.common.repository.account.UserRepository;
|
||||||
import cn.topiam.employee.common.repository.setting.SettingRepository;
|
import cn.topiam.employee.common.repository.setting.SettingRepository;
|
||||||
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
||||||
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
||||||
import cn.topiam.employee.core.security.password.task.PasswordExpireTask;
|
import cn.topiam.employee.core.security.password.task.PasswordExpireTask;
|
||||||
import cn.topiam.employee.support.autoconfiguration.SupportProperties;
|
|
||||||
import cn.topiam.employee.support.lock.Lock;
|
|
||||||
import cn.topiam.employee.support.trace.Trace;
|
import cn.topiam.employee.support.trace.Trace;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
import co.elastic.clients.elasticsearch._types.query_dsl.Query;
|
|
||||||
import static cn.topiam.employee.core.message.MsgVariable.EXPIRE_DAYS;
|
import static cn.topiam.employee.core.message.MsgVariable.EXPIRE_DAYS;
|
||||||
import static cn.topiam.employee.core.setting.constant.PasswordPolicySettingConstants.*;
|
import static cn.topiam.employee.core.setting.constant.PasswordPolicySettingConstants.*;
|
||||||
|
|
||||||
|
@ -68,59 +60,48 @@ public class PasswordExpireWarnTask implements PasswordExpireTask {
|
||||||
/**
|
/**
|
||||||
* 提醒 每天凌晨扫描,发送邮件及短信提醒
|
* 提醒 每天凌晨扫描,发送邮件及短信提醒
|
||||||
*/
|
*/
|
||||||
@Lock(throwException = false)
|
|
||||||
@Trace
|
@Trace
|
||||||
@Scheduled(cron = "0 0 0 * * ?")
|
@Scheduled(cron = "0 0 0 * * ?")
|
||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
long start = System.currentTimeMillis();
|
|
||||||
logger.info("密码过期前提醒任务开始");
|
logger.info("密码过期前提醒任务开始");
|
||||||
//密码有效期天数
|
|
||||||
int expireDays = getExpireDays();
|
int expireDays = getExpireDays();
|
||||||
//密码过期前提醒天数
|
|
||||||
int warnExpireDays = getWarnExpireDays();
|
int warnExpireDays = getWarnExpireDays();
|
||||||
//1、根据提醒时间,分页查询即将要过期的密码
|
//1、根据提醒时间,分页查询即将要过期的密码
|
||||||
// 查询已启用用户信息
|
List<UserEntity> list = userRepository
|
||||||
Query query = Queries.termQueryAsQuery("status", UserStatus.ENABLE.getCode());
|
.findPasswordExpireWarnUser(expireDays - warnExpireDays);
|
||||||
List<UserElasticSearchEntity> list = userRepository.getAllUserElasticSearchEntity(
|
|
||||||
IndexCoordinates.of(supportProperties.getUser().getIndexPrefix()), query);
|
|
||||||
logger.info("待提醒用户为:{}个", list.size());
|
logger.info("待提醒用户为:{}个", list.size());
|
||||||
int reminderNumber = 0;
|
|
||||||
//2、发送通知提醒
|
//2、发送通知提醒
|
||||||
for (UserElasticSearchEntity entity : list) {
|
for (UserEntity entity : list) {
|
||||||
// 获取到密码期日期
|
//如果邮箱不为空,发送邮件通知
|
||||||
LocalDate expiredDate = entity.getLastUpdatePasswordTime().atOffset(ZoneOffset.MAX)
|
if (StringUtils.isNotBlank(entity.getEmail())) {
|
||||||
.plusDays(expireDays).toLocalDate();
|
logger.info("开始提醒用户:{}", entity.getUsername());
|
||||||
LocalDate warnDate = expiredDate.minusDays(warnExpireDays);
|
//获取到期日期
|
||||||
//如果当前日期等于密码到期日期前几天的日期
|
LocalDate expiredDate = entity.getLastUpdatePasswordTime().atOffset(ZoneOffset.MAX)
|
||||||
if (LocalDate.now().equals(warnDate)) {
|
.plusDays(expireDays).toLocalDate();
|
||||||
reminderNumber++;
|
HashMap<String, Object> map = Maps.newHashMap();
|
||||||
long expiredDays = Duration.between(LocalDate.now().atTime(LocalTime.MIN),
|
//查询两个时间的间距
|
||||||
expiredDate.atTime(LocalTime.MIN)).toDays();
|
map.put(EXPIRE_DAYS, Duration.between(LocalDate.now(), expiredDate).toDays());
|
||||||
//如果邮箱不为空,发送邮件通知
|
mailMsgEventPublish.publish(MailType.PASSWORD_SOON_EXPIRED_REMIND,
|
||||||
if (StringUtils.isNotBlank(entity.getEmail())) {
|
entity.getEmail(), map);
|
||||||
logger.info("开始提醒用户:{}", entity.getUsername());
|
logger.info("结束提醒用户:{}", entity.getUsername());
|
||||||
HashMap<String, Object> map = Maps.newHashMap();
|
}
|
||||||
//查询两个时间的间距
|
// 短信通知
|
||||||
map.put(EXPIRE_DAYS, expiredDays);
|
if (StringUtils.isNotBlank(entity.getPhone())) {
|
||||||
mailMsgEventPublish.publish(MailType.PASSWORD_SOON_EXPIRED_REMIND,
|
logger.info("开始提醒用户:{}", entity.getUsername());
|
||||||
entity.getEmail(), map);
|
// 获取到期日期
|
||||||
logger.info("结束提醒用户:{}", entity.getUsername());
|
LocalDate expiredDate = entity.getLastUpdatePasswordTime().atOffset(ZoneOffset.MAX)
|
||||||
}
|
.plusDays(expireDays).toLocalDate();
|
||||||
// 短信通知
|
LinkedHashMap<String, String> map = Maps.newLinkedHashMap();
|
||||||
if (StringUtils.isNotBlank(entity.getPhone())) {
|
// 查询两个时间的间距
|
||||||
logger.info("开始提醒用户:{}", entity.getUsername());
|
map.put(EXPIRE_DAYS,
|
||||||
LinkedHashMap<String, String> map = Maps.newLinkedHashMap();
|
String.valueOf(Duration.between(LocalDate.now(), expiredDate).toDays()));
|
||||||
// 查询两个时间的间距
|
smsMsgEventPublish.publish(SmsType.PASSWORD_SOON_EXPIRED_REMIND, entity.getPhone(),
|
||||||
map.put(EXPIRE_DAYS, String.valueOf(expiredDays));
|
map);
|
||||||
smsMsgEventPublish.publish(SmsType.PASSWORD_SOON_EXPIRED_REMIND,
|
logger.info("结束提醒用户:{}", entity.getUsername());
|
||||||
entity.getPhone(), map);
|
|
||||||
logger.info("结束提醒用户:{}", entity.getUsername());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
logger.info("密码过期前提醒任务结束, 提醒用户数量[{}], 耗时:[{}]s", reminderNumber,
|
logger.info("密码过期前提醒任务结束");
|
||||||
(System.currentTimeMillis() - start) / 1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -169,9 +150,4 @@ public class PasswordExpireWarnTask implements PasswordExpireTask {
|
||||||
* 短信消息发送
|
* 短信消息发送
|
||||||
*/
|
*/
|
||||||
private final SmsMsgEventPublish smsMsgEventPublish;
|
private final SmsMsgEventPublish smsMsgEventPublish;
|
||||||
|
|
||||||
/**
|
|
||||||
* SupportProperties
|
|
||||||
*/
|
|
||||||
private final SupportProperties supportProperties;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
@ -39,10 +38,7 @@ import cn.topiam.employee.audit.context.AuditContext;
|
||||||
import cn.topiam.employee.audit.entity.Target;
|
import cn.topiam.employee.audit.entity.Target;
|
||||||
import cn.topiam.employee.audit.enums.TargetType;
|
import cn.topiam.employee.audit.enums.TargetType;
|
||||||
import cn.topiam.employee.common.entity.account.*;
|
import cn.topiam.employee.common.entity.account.*;
|
||||||
import cn.topiam.employee.common.repository.account.OrganizationMemberRepository;
|
|
||||||
import cn.topiam.employee.common.repository.account.OrganizationRepository;
|
import cn.topiam.employee.common.repository.account.OrganizationRepository;
|
||||||
import cn.topiam.employee.core.mq.UserMessagePublisher;
|
|
||||||
import cn.topiam.employee.core.mq.UserMessageTag;
|
|
||||||
import cn.topiam.employee.openapi.constant.OpenApiStatus;
|
import cn.topiam.employee.openapi.constant.OpenApiStatus;
|
||||||
import cn.topiam.employee.openapi.converter.account.OrganizationConverter;
|
import cn.topiam.employee.openapi.converter.account.OrganizationConverter;
|
||||||
import cn.topiam.employee.openapi.exception.OpenApiException;
|
import cn.topiam.employee.openapi.exception.OpenApiException;
|
||||||
|
@ -117,7 +113,6 @@ public class OrganizationServiceImpl implements OrganizationService {
|
||||||
Optional<OrganizationEntity> optional = this.organizationRepository.findById(param.getId());
|
Optional<OrganizationEntity> optional = this.organizationRepository.findById(param.getId());
|
||||||
if (optional.isPresent()) {
|
if (optional.isPresent()) {
|
||||||
OrganizationEntity entity = optional.get();
|
OrganizationEntity entity = optional.get();
|
||||||
String userIds;
|
|
||||||
//如果修改了名字,递归修改和该组织有关所有节点信息的展示路径
|
//如果修改了名字,递归修改和该组织有关所有节点信息的展示路径
|
||||||
if (!optional.get().getName().equals(param.getName())) {
|
if (!optional.get().getName().equals(param.getName())) {
|
||||||
//修改名称
|
//修改名称
|
||||||
|
@ -127,22 +122,10 @@ public class OrganizationServiceImpl implements OrganizationService {
|
||||||
if (!entity.getLeaf()) {
|
if (!entity.getLeaf()) {
|
||||||
recursiveUpdateDisplayPath(entity.getId(), entity.getId(), param.getName());
|
recursiveUpdateDisplayPath(entity.getId(), entity.getId(), param.getName());
|
||||||
}
|
}
|
||||||
userIds = organizationRepository
|
|
||||||
.getOrgMemberList(organization.getId(), QUserEntity.userEntity.id).stream()
|
|
||||||
.map(String::valueOf).collect(Collectors.joining(","));
|
|
||||||
} else {
|
|
||||||
List<OrganizationMemberEntity> orgMemberList = organizationMemberRepository
|
|
||||||
.findAllByOrgId(entity.getId());
|
|
||||||
userIds = orgMemberList.stream().map(item -> String.valueOf(item.getUserId()))
|
|
||||||
.collect(Collectors.joining(","));
|
|
||||||
}
|
}
|
||||||
//修改
|
//修改
|
||||||
BeanUtils.merge(organization, entity, LAST_MODIFIED_BY, LAST_MODIFIED_TIME);
|
BeanUtils.merge(organization, entity, LAST_MODIFIED_BY, LAST_MODIFIED_TIME);
|
||||||
organizationRepository.save(entity);
|
organizationRepository.save(entity);
|
||||||
// 更新用户es信息
|
|
||||||
if (StringUtils.isNotBlank(userIds)) {
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, userIds);
|
|
||||||
}
|
|
||||||
AuditContext.setTarget(
|
AuditContext.setTarget(
|
||||||
Target.builder().id(entity.getId()).type(TargetType.ORGANIZATION).build());
|
Target.builder().id(entity.getId()).type(TargetType.ORGANIZATION).build());
|
||||||
}
|
}
|
||||||
|
@ -309,25 +292,15 @@ public class OrganizationServiceImpl implements OrganizationService {
|
||||||
.orElseThrow(() -> new OpenApiException(OpenApiStatus.DEPARTMENT_NOT_EXIST));
|
.orElseThrow(() -> new OpenApiException(OpenApiStatus.DEPARTMENT_NOT_EXIST));
|
||||||
}
|
}
|
||||||
|
|
||||||
private final JPAQueryFactory jpaQueryFactory;
|
private final JPAQueryFactory jpaQueryFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 组织架构数据映射器
|
* 组织架构数据映射器
|
||||||
*/
|
*/
|
||||||
private final OrganizationConverter organizationConverter;
|
private final OrganizationConverter organizationConverter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OrganizationRepository
|
* OrganizationRepository
|
||||||
*/
|
*/
|
||||||
private final OrganizationRepository organizationRepository;
|
private final OrganizationRepository organizationRepository;
|
||||||
|
|
||||||
/**
|
|
||||||
* UserMessagePublisher
|
|
||||||
*/
|
|
||||||
private final UserMessagePublisher userMessagePublisher;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OrganizationMemberRepository
|
|
||||||
*/
|
|
||||||
private final OrganizationMemberRepository organizationMemberRepository;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,8 +48,6 @@ import cn.topiam.employee.common.repository.account.UserRepository;
|
||||||
import cn.topiam.employee.core.message.MsgVariable;
|
import cn.topiam.employee.core.message.MsgVariable;
|
||||||
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
||||||
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
||||||
import cn.topiam.employee.core.mq.UserMessagePublisher;
|
|
||||||
import cn.topiam.employee.core.mq.UserMessageTag;
|
|
||||||
import cn.topiam.employee.openapi.constant.OpenApiStatus;
|
import cn.topiam.employee.openapi.constant.OpenApiStatus;
|
||||||
import cn.topiam.employee.openapi.converter.account.UserConverter;
|
import cn.topiam.employee.openapi.converter.account.UserConverter;
|
||||||
import cn.topiam.employee.openapi.exception.OpenApiException;
|
import cn.topiam.employee.openapi.exception.OpenApiException;
|
||||||
|
@ -115,8 +113,6 @@ public class UserServiceImpl implements UserService {
|
||||||
}
|
}
|
||||||
AuditContext.setTarget(Target.builder().id(id.toString()).type(TargetType.USER).build());
|
AuditContext.setTarget(Target.builder().id(id.toString()).type(TargetType.USER).build());
|
||||||
userRepository.updateUserStatus(id, status);
|
userRepository.updateUserStatus(id, status);
|
||||||
// 更新用户索引数据
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, String.valueOf(id));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -168,9 +164,6 @@ public class UserServiceImpl implements UserService {
|
||||||
organizationMemberRepository.save(member);
|
organizationMemberRepository.save(member);
|
||||||
AuditContext.setTarget(Target.builder().type(USER).id(user.getId().toString()).build(),
|
AuditContext.setTarget(Target.builder().type(USER).id(user.getId().toString()).build(),
|
||||||
Target.builder().type(USER_DETAIL).id(detail.getId().toString()).build());
|
Target.builder().type(USER_DETAIL).id(detail.getId().toString()).build());
|
||||||
// 保存ES用户信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE,
|
|
||||||
String.valueOf(user.getId()));
|
|
||||||
// 发送短信和邮件的欢迎信息(密码通知)
|
// 发送短信和邮件的欢迎信息(密码通知)
|
||||||
UserCreateParam.PasswordInitializeConfig passwordInitializeConfig = param
|
UserCreateParam.PasswordInitializeConfig passwordInitializeConfig = param
|
||||||
.getPasswordInitializeConfig();
|
.getPasswordInitializeConfig();
|
||||||
|
@ -266,9 +259,6 @@ public class UserServiceImpl implements UserService {
|
||||||
userDetailsRepository.save(detail);
|
userDetailsRepository.save(detail);
|
||||||
AuditContext.setTarget(Target.builder().type(USER).id(user.getId().toString()).build(),
|
AuditContext.setTarget(Target.builder().type(USER).id(user.getId().toString()).build(),
|
||||||
Target.builder().type(USER_DETAIL).id(detail.getId().toString()).build());
|
Target.builder().type(USER_DETAIL).id(detail.getId().toString()).build());
|
||||||
// 更新ES用户信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE,
|
|
||||||
String.valueOf(user.getId()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -294,8 +284,6 @@ public class UserServiceImpl implements UserService {
|
||||||
organizationMemberRepository.deleteByUserId(Long.valueOf(id));
|
organizationMemberRepository.deleteByUserId(Long.valueOf(id));
|
||||||
//删除用户组用户详情
|
//删除用户组用户详情
|
||||||
userGroupMemberRepository.deleteByUserId(Long.valueOf(id));
|
userGroupMemberRepository.deleteByUserId(Long.valueOf(id));
|
||||||
// 删除ES用户信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.DELETE, id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -427,19 +415,13 @@ public class UserServiceImpl implements UserService {
|
||||||
*/
|
*/
|
||||||
private final PasswordPolicyManager<UserEntity> passwordPolicyManager;
|
private final PasswordPolicyManager<UserEntity> passwordPolicyManager;
|
||||||
|
|
||||||
/**
|
|
||||||
* UserMessagePublisher
|
|
||||||
*/
|
|
||||||
private final UserMessagePublisher userMessagePublisher;
|
|
||||||
|
|
||||||
public UserServiceImpl(UserConverter userConverter, UserRepository userRepository,
|
public UserServiceImpl(UserConverter userConverter, UserRepository userRepository,
|
||||||
OrganizationMemberRepository organizationMemberRepository,
|
OrganizationMemberRepository organizationMemberRepository,
|
||||||
UserGroupMemberRepository userGroupMemberRepository,
|
UserGroupMemberRepository userGroupMemberRepository,
|
||||||
UserDetailRepository userDetailsRepository,
|
UserDetailRepository userDetailsRepository,
|
||||||
MailMsgEventPublish mailMsgEventPublish,
|
MailMsgEventPublish mailMsgEventPublish,
|
||||||
SmsMsgEventPublish smsMsgEventPublish,
|
SmsMsgEventPublish smsMsgEventPublish,
|
||||||
PasswordPolicyManager<UserEntity> passwordPolicyManager,
|
PasswordPolicyManager<UserEntity> passwordPolicyManager) {
|
||||||
UserMessagePublisher userMessagePublisher) {
|
|
||||||
this.userConverter = userConverter;
|
this.userConverter = userConverter;
|
||||||
this.userRepository = userRepository;
|
this.userRepository = userRepository;
|
||||||
this.organizationMemberRepository = organizationMemberRepository;
|
this.organizationMemberRepository = organizationMemberRepository;
|
||||||
|
@ -448,6 +430,5 @@ public class UserServiceImpl implements UserService {
|
||||||
this.mailMsgEventPublish = mailMsgEventPublish;
|
this.mailMsgEventPublish = mailMsgEventPublish;
|
||||||
this.smsMsgEventPublish = smsMsgEventPublish;
|
this.smsMsgEventPublish = smsMsgEventPublish;
|
||||||
this.passwordPolicyManager = passwordPolicyManager;
|
this.passwordPolicyManager = passwordPolicyManager;
|
||||||
this.userMessagePublisher = userMessagePublisher;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,6 @@ import cn.topiam.employee.common.repository.authentication.IdentityProviderRepos
|
||||||
import cn.topiam.employee.common.repository.setting.SettingRepository;
|
import cn.topiam.employee.common.repository.setting.SettingRepository;
|
||||||
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
import cn.topiam.employee.core.message.mail.MailMsgEventPublish;
|
||||||
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
||||||
import cn.topiam.employee.core.mq.UserMessagePublisher;
|
|
||||||
import cn.topiam.employee.core.security.form.FormLoginSecretFilter;
|
import cn.topiam.employee.core.security.form.FormLoginSecretFilter;
|
||||||
import cn.topiam.employee.core.security.otp.OtpContextHelp;
|
import cn.topiam.employee.core.security.otp.OtpContextHelp;
|
||||||
import cn.topiam.employee.core.security.password.task.PasswordExpireTask;
|
import cn.topiam.employee.core.security.password.task.PasswordExpireTask;
|
||||||
|
@ -83,7 +82,6 @@ import cn.topiam.employee.portal.security.handler.PortalAuthenticationSuccessHan
|
||||||
import cn.topiam.employee.portal.security.listener.PortalAuthenticationFailureEventListener;
|
import cn.topiam.employee.portal.security.listener.PortalAuthenticationFailureEventListener;
|
||||||
import cn.topiam.employee.portal.security.listener.PortalAuthenticationSuccessEventListener;
|
import cn.topiam.employee.portal.security.listener.PortalAuthenticationSuccessEventListener;
|
||||||
import cn.topiam.employee.portal.security.listener.PortalLogoutSuccessEventListener;
|
import cn.topiam.employee.portal.security.listener.PortalLogoutSuccessEventListener;
|
||||||
import cn.topiam.employee.support.autoconfiguration.SupportProperties;
|
|
||||||
import cn.topiam.employee.support.geo.GeoLocationService;
|
import cn.topiam.employee.support.geo.GeoLocationService;
|
||||||
import cn.topiam.employee.support.jackjson.SupportJackson2Module;
|
import cn.topiam.employee.support.jackjson.SupportJackson2Module;
|
||||||
import cn.topiam.employee.support.security.authentication.WebAuthenticationDetailsSource;
|
import cn.topiam.employee.support.security.authentication.WebAuthenticationDetailsSource;
|
||||||
|
@ -409,17 +407,12 @@ public class PortalSecurityConfiguration extends AbstractSecurityConfiguration
|
||||||
*
|
*
|
||||||
* @param settingRepository {@link SettingRepository}
|
* @param settingRepository {@link SettingRepository}
|
||||||
* @param userRepository {@link UserRepository}
|
* @param userRepository {@link UserRepository}
|
||||||
* @param supportProperties {@link SupportProperties}
|
|
||||||
* @param userMessagePublisher {@link UserMessagePublisher}
|
|
||||||
* @return {@link PasswordExpireTask}
|
* @return {@link PasswordExpireTask}
|
||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
public PasswordExpireTask passwordExpireLockTask(SettingRepository settingRepository,
|
public PasswordExpireTask passwordExpireLockTask(SettingRepository settingRepository,
|
||||||
UserRepository userRepository,
|
UserRepository userRepository) {
|
||||||
SupportProperties supportProperties,
|
return new PasswordExpireLockTask(settingRepository, userRepository);
|
||||||
UserMessagePublisher userMessagePublisher) {
|
|
||||||
return new PasswordExpireLockTask(settingRepository, userRepository, supportProperties,
|
|
||||||
userMessagePublisher);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -445,10 +438,9 @@ public class PortalSecurityConfiguration extends AbstractSecurityConfiguration
|
||||||
public PasswordExpireTask passwordExpireWarnTask(SettingRepository settingRepository,
|
public PasswordExpireTask passwordExpireWarnTask(SettingRepository settingRepository,
|
||||||
UserRepository userRepository,
|
UserRepository userRepository,
|
||||||
MailMsgEventPublish mailMsgEventPublish,
|
MailMsgEventPublish mailMsgEventPublish,
|
||||||
SmsMsgEventPublish smsMsgEventPublish,
|
SmsMsgEventPublish smsMsgEventPublish) {
|
||||||
SupportProperties supportProperties) {
|
|
||||||
return new PasswordExpireWarnTask(settingRepository, userRepository, mailMsgEventPublish,
|
return new PasswordExpireWarnTask(settingRepository, userRepository, mailMsgEventPublish,
|
||||||
smsMsgEventPublish, supportProperties);
|
smsMsgEventPublish);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -52,8 +52,6 @@ import cn.topiam.employee.common.repository.account.UserIdpRepository;
|
||||||
import cn.topiam.employee.common.repository.account.UserRepository;
|
import cn.topiam.employee.common.repository.account.UserRepository;
|
||||||
import cn.topiam.employee.common.repository.authentication.IdentityProviderRepository;
|
import cn.topiam.employee.common.repository.authentication.IdentityProviderRepository;
|
||||||
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
import cn.topiam.employee.core.message.sms.SmsMsgEventPublish;
|
||||||
import cn.topiam.employee.core.mq.UserMessagePublisher;
|
|
||||||
import cn.topiam.employee.core.mq.UserMessageTag;
|
|
||||||
import cn.topiam.employee.core.security.otp.OtpContextHelp;
|
import cn.topiam.employee.core.security.otp.OtpContextHelp;
|
||||||
import cn.topiam.employee.portal.converter.AccountConverter;
|
import cn.topiam.employee.portal.converter.AccountConverter;
|
||||||
import cn.topiam.employee.portal.pojo.request.*;
|
import cn.topiam.employee.portal.pojo.request.*;
|
||||||
|
@ -108,9 +106,6 @@ public class AccountServiceImpl implements AccountService {
|
||||||
toUserDetailsEntity.setId(detail.getId());
|
toUserDetailsEntity.setId(detail.getId());
|
||||||
BeanUtils.merge(toUserDetailsEntity, detail, LAST_MODIFIED_BY, LAST_MODIFIED_TIME);
|
BeanUtils.merge(toUserDetailsEntity, detail, LAST_MODIFIED_BY, LAST_MODIFIED_TIME);
|
||||||
userDetailsRepository.save(detail);
|
userDetailsRepository.save(detail);
|
||||||
// 更新ES用户信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE,
|
|
||||||
String.valueOf(detail.getId()));
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,8 +177,6 @@ public class AccountServiceImpl implements AccountService {
|
||||||
}
|
}
|
||||||
Long id = Long.valueOf(SecurityUtils.getCurrentUser().getId());
|
Long id = Long.valueOf(SecurityUtils.getCurrentUser().getId());
|
||||||
userRepository.updateUserPhone(id, param.getPhone());
|
userRepository.updateUserPhone(id, param.getPhone());
|
||||||
// 更新ES用户手机号信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE, String.valueOf(id));
|
|
||||||
// 修改手机号成功发送短信
|
// 修改手机号成功发送短信
|
||||||
LinkedHashMap<String, String> parameter = Maps.newLinkedHashMap();
|
LinkedHashMap<String, String> parameter = Maps.newLinkedHashMap();
|
||||||
parameter.put(USERNAME, user.getUsername());
|
parameter.put(USERNAME, user.getUsername());
|
||||||
|
@ -239,9 +232,6 @@ public class AccountServiceImpl implements AccountService {
|
||||||
}
|
}
|
||||||
userRepository.updateUserEmail(Long.valueOf(SecurityUtils.getCurrentUser().getId()),
|
userRepository.updateUserEmail(Long.valueOf(SecurityUtils.getCurrentUser().getId()),
|
||||||
param.getEmail());
|
param.getEmail());
|
||||||
// 更新ES用户邮箱信息
|
|
||||||
userMessagePublisher.sendUserChangeMessage(UserMessageTag.SAVE,
|
|
||||||
String.valueOf(user.getId()));
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -476,11 +466,6 @@ public class AccountServiceImpl implements AccountService {
|
||||||
*/
|
*/
|
||||||
private final UserIdpRepository userIdpRepository;
|
private final UserIdpRepository userIdpRepository;
|
||||||
|
|
||||||
/**
|
|
||||||
* MessagePublisher
|
|
||||||
*/
|
|
||||||
private final UserMessagePublisher userMessagePublisher;
|
|
||||||
|
|
||||||
public AccountServiceImpl(AsyncConfigurer asyncConfigurer, AccountConverter accountConverter,
|
public AccountServiceImpl(AsyncConfigurer asyncConfigurer, AccountConverter accountConverter,
|
||||||
PasswordEncoder passwordEncoder, UserRepository userRepository,
|
PasswordEncoder passwordEncoder, UserRepository userRepository,
|
||||||
UserDetailRepository userDetailsRepository,
|
UserDetailRepository userDetailsRepository,
|
||||||
|
@ -489,8 +474,7 @@ public class AccountServiceImpl implements AccountService {
|
||||||
StringRedisTemplate stringRedisTemplate,
|
StringRedisTemplate stringRedisTemplate,
|
||||||
PasswordPolicyManager<UserEntity> passwordPolicyManager,
|
PasswordPolicyManager<UserEntity> passwordPolicyManager,
|
||||||
IdentityProviderRepository identityProviderRepository,
|
IdentityProviderRepository identityProviderRepository,
|
||||||
UserIdpRepository userIdpRepository,
|
UserIdpRepository userIdpRepository) {
|
||||||
UserMessagePublisher userMessagePublisher) {
|
|
||||||
this.executor = asyncConfigurer.getAsyncExecutor();
|
this.executor = asyncConfigurer.getAsyncExecutor();
|
||||||
this.accountConverter = accountConverter;
|
this.accountConverter = accountConverter;
|
||||||
this.passwordEncoder = passwordEncoder;
|
this.passwordEncoder = passwordEncoder;
|
||||||
|
@ -503,6 +487,5 @@ public class AccountServiceImpl implements AccountService {
|
||||||
this.passwordPolicyManager = passwordPolicyManager;
|
this.passwordPolicyManager = passwordPolicyManager;
|
||||||
this.identityProviderRepository = identityProviderRepository;
|
this.identityProviderRepository = identityProviderRepository;
|
||||||
this.userIdpRepository = userIdpRepository;
|
this.userIdpRepository = userIdpRepository;
|
||||||
this.userMessagePublisher = userMessagePublisher;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue