diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/FavoriteDAO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/FavoriteDAO.java index 09ad316d..be312866 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/FavoriteDAO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/FavoriteDAO.java @@ -61,4 +61,29 @@ public interface FavoriteDAO extends IMapper { return this.delete(wrapper); } + /** + * 通过 userId 删除收藏 + * + * @param userId userId + * @return effect + */ + default int deleteFavoriteByUserId(Long userId) { + LambdaQueryWrapper wrapper = this.lambda() + .eq(FavoriteDO::getUserId, userId); + return this.delete(wrapper); + } + + /** + * 通过 userId 删除收藏 + * + * @param type type + * @param userIdList userIdList + * @return effect + */ + default int deleteFavoriteByUserIdList(List userIdList) { + LambdaQueryWrapper wrapper = this.lambda() + .in(FavoriteDO::getUserId, userIdList); + return this.delete(wrapper); + } + } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/cache/FavoriteCacheKeyDefine.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/cache/FavoriteCacheKeyDefine.java index cbda86b7..b010fc78 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/cache/FavoriteCacheKeyDefine.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/define/cache/FavoriteCacheKeyDefine.java @@ -18,7 +18,7 @@ public interface FavoriteCacheKeyDefine { .key("favorite:{}:{}") .desc("收藏信息 ${type} ${userId}") .type(Long.class) - .timeout(8, TimeUnit.HOURS) + .timeout(3, TimeUnit.DAYS) .build(); } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/favorite/FavoriteQueryRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/favorite/FavoriteQueryRequest.java index cb336c02..098ea0df 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/favorite/FavoriteQueryRequest.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/favorite/FavoriteQueryRequest.java @@ -21,9 +21,6 @@ import java.util.List; @Schema(name = "FavoriteQueryRequest", description = "收藏 查询请求对象") public class FavoriteQueryRequest extends PageRequest { - @Schema(description = "id") - private Long id; - @Schema(description = "用户id") private Long userId; @@ -33,7 +30,4 @@ public class FavoriteQueryRequest extends PageRequest { @Schema(description = "收藏类型") private String type; - @Schema(description = "用户id") - private List userIdList; - } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserService.java index 8e778afe..df2839a0 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemUserService.java @@ -70,6 +70,13 @@ public interface SystemUserService { */ Integer deleteSystemUserById(Long id); + /** + * 删除 id 删除用户拓展信息 + * + * @param id + */ + void deleteSystemUserRel(Long id); + /** * 重置密码 * diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/FavoriteServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/FavoriteServiceImpl.java index 41114812..92c520af 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/FavoriteServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/FavoriteServiceImpl.java @@ -112,20 +112,17 @@ public class FavoriteServiceImpl implements FavoriteService { } @Override - @Async("asyncExecutor") public void deleteFavoriteByUserId(Long userId) { if (userId == null) { return; } + // 删除库 + favoriteDAO.deleteFavoriteByUserId(userId); // 删除缓存 List favoriteKeyList = Arrays.stream(FavoriteTypeEnum.values()) .map(s -> FavoriteCacheKeyDefine.FAVORITE.format(s, userId)) .collect(Collectors.toList()); redisTemplate.delete(favoriteKeyList); - // 删除库 - FavoriteQueryRequest request = new FavoriteQueryRequest(); - request.setUserId(userId); - favoriteDAO.delete(this.buildQueryWrapper(request)); } @Override @@ -134,6 +131,8 @@ public class FavoriteServiceImpl implements FavoriteService { if (Lists.isEmpty(userIdList)) { return; } + // 删除库 + favoriteDAO.deleteFavoriteByUserIdList(userIdList); // 删除缓存 List favoriteKeyList = new ArrayList<>(); for (Long userId : userIdList) { @@ -142,10 +141,6 @@ public class FavoriteServiceImpl implements FavoriteService { .forEach(favoriteKeyList::add); } redisTemplate.delete(favoriteKeyList); - // 删除库 - FavoriteQueryRequest request = new FavoriteQueryRequest(); - request.setUserIdList(userIdList); - favoriteDAO.delete(this.buildQueryWrapper(request)); } /** @@ -156,11 +151,9 @@ public class FavoriteServiceImpl implements FavoriteService { */ private LambdaQueryWrapper buildQueryWrapper(FavoriteQueryRequest request) { return favoriteDAO.wrapper() - .eq(FavoriteDO::getId, request.getId()) .eq(FavoriteDO::getUserId, request.getUserId()) .eq(FavoriteDO::getRelId, request.getRelId()) - .eq(FavoriteDO::getType, request.getType()) - .in(FavoriteDO::getUserId, request.getUserIdList()); + .eq(FavoriteDO::getType, request.getType()); } } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PreferenceServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PreferenceServiceImpl.java index d407b9e3..f6a760dc 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PreferenceServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PreferenceServiceImpl.java @@ -96,7 +96,6 @@ public class PreferenceServiceImpl implements PreferenceService { } @Override - @Async("asyncExecutor") public void deletePreferenceByUserId(Long userId) { // 删除 int effect = preferenceDAO.deleteByUserId(userId); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java index 1ee7edd4..ae97e84c 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserServiceImpl.java @@ -14,8 +14,10 @@ import com.orion.ops.framework.redis.core.utils.RedisStrings; import com.orion.ops.framework.redis.core.utils.RedisUtils; import com.orion.ops.framework.security.core.utils.SecurityUtils; import com.orion.ops.module.infra.convert.SystemUserConvert; +import com.orion.ops.module.infra.dao.OperatorLogDAO; import com.orion.ops.module.infra.dao.SystemUserDAO; import com.orion.ops.module.infra.dao.SystemUserRoleDAO; +import com.orion.ops.module.infra.define.cache.TipsCacheKeyDefine; import com.orion.ops.module.infra.define.cache.UserCacheKeyDefine; import com.orion.ops.module.infra.entity.domain.SystemUserDO; import com.orion.ops.module.infra.entity.request.user.*; @@ -25,10 +27,11 @@ import com.orion.ops.module.infra.service.AuthenticationService; import com.orion.ops.module.infra.service.FavoriteService; import com.orion.ops.module.infra.service.PreferenceService; import com.orion.ops.module.infra.service.SystemUserService; +import com.orion.spring.SpringHolder; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; @@ -51,6 +54,9 @@ public class SystemUserServiceImpl implements SystemUserService { @Resource private SystemUserRoleDAO systemUserRoleDAO; + @Resource + private OperatorLogDAO operatorLogDAO; + @Resource private FavoriteService favoriteService; @@ -166,7 +172,6 @@ public class SystemUserServiceImpl implements SystemUserService { } @Override - @Transactional(rollbackFor = Exception.class) public Integer deleteSystemUserById(Long id) { if (id.equals(SecurityUtils.getLoginUserId())) { throw ErrorCode.UNSUPPOETED.exception(); @@ -179,15 +184,30 @@ public class SystemUserServiceImpl implements SystemUserService { // 删除用户 int effect = systemUserDAO.deleteById(id); log.info("SystemUserService-deleteSystemUserById id: {}, effect: {}", id, effect); + // 异步删除额外信息 + SpringHolder.getBean(SystemUserService.class).deleteSystemUserRel(id); + return effect; + } + + @Override + @Async("asyncExecutor") + public void deleteSystemUserRel(Long id) { + log.info("SystemUserService-deleteSystemUserRel id: {}", id); + // 删除用户缓存 需要扫描的 key 让其自动过期 + redisTemplate.delete(Lists.of( + // 用户缓存 + UserCacheKeyDefine.USER_INFO.format(id), + // 用户提示 + TipsCacheKeyDefine.TIPS.format(id) + )); // 删除角色关联 - effect += systemUserRoleDAO.deleteByUserId(id); - // 删除用户缓存 其他的会自动过期 - redisTemplate.delete(UserCacheKeyDefine.USER_INFO.format(id)); + systemUserRoleDAO.deleteByUserId(id); + // 删除操作日志 + operatorLogDAO.deleteByUserId(id); // 删除用户收藏 favoriteService.deleteFavoriteByUserId(id); // 删除用户偏好 preferenceService.deletePreferenceByUserId(id); - return effect; } @Override