diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/domain/vo/ForgeUserActionSearchVo.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/domain/vo/ForgeUserActionSearchVo.java new file mode 100644 index 000000000..9816d90e2 --- /dev/null +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/domain/vo/ForgeUserActionSearchVo.java @@ -0,0 +1,16 @@ +package com.microservices.system.domain.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * @author OTTO + */ +@Data +public class ForgeUserActionSearchVo { + private Date startTime; + private Date endTime; + // 操作类型为注销账户 + private String actionType = "DestroyUser"; +} diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/mapper/SysUserDeptRoleMapper.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/mapper/SysUserDeptRoleMapper.java index d3ed0aff9..608d8b8cd 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/mapper/SysUserDeptRoleMapper.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/mapper/SysUserDeptRoleMapper.java @@ -143,4 +143,12 @@ public interface SysUserDeptRoleMapper { * @return 用户身份 */ SysUserDeptRole selectUserIdentityByAllStatus(@Param("deptId") Long deptId, @Param("userId") Long userId); + + /** + * 批量更新用户身份状态 + * + * @param userId 用户Id + * @param state 状态 + */ + void updateUserIdentifyStateByUserId(@Param("userId") Long userId, @Param("state") String state); } diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysUserDeptRoleService.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysUserDeptRoleService.java index df53df4ab..f0720a45d 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysUserDeptRoleService.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysUserDeptRoleService.java @@ -153,4 +153,11 @@ public interface ISysUserDeptRoleService { List selectZoneUserIdentityListByUser(Long userId, Boolean isContainMember, String deptName, String roleName); SysUserDeptRole getAllStatusUserIdentityByDeptIdAndUserId(Long deptId, Long userId); + + /** + * 注销用户时清理用户身份 + * + * @param userId 用户Id + */ + void deleteSysUserDeptRoleByDeleteUser(@Param("userId") Long userId); } diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserDeptRoleServiceImpl.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserDeptRoleServiceImpl.java index 87689a57f..0d6aec7e2 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserDeptRoleServiceImpl.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserDeptRoleServiceImpl.java @@ -610,6 +610,11 @@ public class SysUserDeptRoleServiceImpl implements ISysUserDeptRoleService { return sysUserDeptRoleMapper.selectUserIdentityByAllStatus(deptId, userId); } + @Override + public void deleteSysUserDeptRoleByDeleteUser(Long userId) { + sysUserDeptRoleMapper.updateUserIdentifyStateByUserId(userId, UserIdentityStatus.DELETE.getState()); + } + private SysUser selectSysUserById(Long userId) { SysUser sysUser = sysUserMapper.selectUserById(userId); if (sysUser == null) { diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserServiceImpl.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserServiceImpl.java index f7015ebec..a28674a90 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserServiceImpl.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysUserServiceImpl.java @@ -137,7 +137,15 @@ public class SysUserServiceImpl implements ISysUserService { @Override public SysUser selectUserByUserName(String userName) { - return userMapper.selectUserByUserName(userName); + SysUser sysUser = userMapper.selectUserByUserName(userName); + return checkUserIsDelete(sysUser); + } + + private SysUser checkUserIsDelete(SysUser sysUser) { + if (UserConstants.DEL_FLAG_TRUE.equals(sysUser.getDelFlag())) { + return sysUser.toDeleteUser(); + } + return sysUser; } /** @@ -600,7 +608,7 @@ public class SysUserServiceImpl implements ISysUserService { @Override public SysUser getSysUserByGitLinkUserId(Long gitLinkUserId) { - return userMapper.selectUserByGitLinkUserId(gitLinkUserId); + return checkUserIsDelete(userMapper.selectUserByGitLinkUserId(gitLinkUserId)); } @Override diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/task/SyncGitLinkUserInfoJob.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/task/SyncGitLinkUserInfoJob.java index b5707ac2f..5a6a2b199 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/task/SyncGitLinkUserInfoJob.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/task/SyncGitLinkUserInfoJob.java @@ -1,10 +1,15 @@ package com.microservices.system.task; +import com.microservices.common.core.constant.UserConstants; import com.microservices.common.core.utils.DateUtils; import com.microservices.system.api.domain.SysUser; import com.microservices.system.domain.ForgeUser; +import com.microservices.system.domain.ForgeUserAction; +import com.microservices.system.domain.vo.ForgeUserActionSearchVo; +import com.microservices.system.mapper.ForgeUserActionMapper; import com.microservices.system.mapper.ForgeUserMapper; import com.microservices.system.mapper.SysUserMapper; +import com.microservices.system.service.ISysUserDeptRoleService; import com.microservices.system.service.ISysUserService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -12,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -26,9 +32,13 @@ public class SyncGitLinkUserInfoJob { @Autowired private ForgeUserMapper forgeUserMapper; @Autowired + private ForgeUserActionMapper forgeUserActionMapper; + @Autowired private ISysUserService sysUserService; @Autowired private SysUserMapper sysUserMapper; + @Autowired + private ISysUserDeptRoleService sysUserDeptRoleService; /** * 每日凌晨两点执行一次全量用户从GitLink同步信息(同时同步Forge上已注销用户信息) @@ -39,11 +49,12 @@ public class SyncGitLinkUserInfoJob { } /** - * 每隔十分钟对GitLink上五分钟内有更新的用户进行一次同步(同时同步Forge上已注销用户信息) + * 每隔五分钟对GitLink上五分钟内有更新的用户进行一次同步(同时同步Forge上已注销用户信息) */ @Scheduled(fixedDelay = 5, timeUnit = TimeUnit.MINUTES) public void syncIncrementGitLinkUserInfo() { incrementSyncForgeUserInfo(); + incrementSyncForgeDeleteUserInfo(); } // 增量同步Forge用户信息 @@ -69,7 +80,24 @@ public class SyncGitLinkUserInfoJob { // 增量同步Forge上已注销账号信息 private void incrementSyncForgeDeleteUserInfo() { + ForgeUserActionSearchVo forgeUserActionSearchVo = new ForgeUserActionSearchVo(); + // 查询定时任务执行开始前十分钟到定时任务开始执行期间的所有Forge用户的账号注销记录 + Date now = DateUtils.getNowDate(); + forgeUserActionSearchVo.setStartTime(DateUtils.addHours(now, -10)); + forgeUserActionSearchVo.setEndTime(now); + List forgeUserActionList = forgeUserActionMapper.selectForgeUserActionList(forgeUserActionSearchVo); + // 遍历Forge用户注销记录列表,检查微服务平台是否存在有Forge注销记录但是在微服务平台未删除的用户 + for (ForgeUserAction forgeUserAction : forgeUserActionList) { + SysUser sysUser = sysUserMapper.selectUserByGitLinkUserId(forgeUserAction.getUserId()); + if (sysUser != null && UserConstants.DEL_FLAG_FALSE.equals(sysUser.getDelFlag())) { + log.info("检测到用户{}在Forge端已注销,将该用户在微服务平台的所有身份标记为已注销同时逻辑删除该用户", sysUser.getUserName()); + // 更新用户所有身份为已注销 + sysUserDeptRoleService.deleteSysUserDeptRoleByDeleteUser(sysUser.getUserId()); + // 逻辑删除该用户 + sysUserService.deleteUserById(sysUser.getUserId()); + } + } } // 全量同步Forge用户信息 diff --git a/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysUserDeptRoleMapper.xml b/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysUserDeptRoleMapper.xml index 0abfe5810..29196a19f 100644 --- a/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysUserDeptRoleMapper.xml +++ b/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysUserDeptRoleMapper.xml @@ -266,6 +266,11 @@ #{userId} + + update sys_user_dept_role + set state = #{state} + where user_id = #{userId} + delete diff --git a/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysUserMapper.xml b/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysUserMapper.xml index 21555a23a..6fe8c8f7d 100644 --- a/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -163,7 +163,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"