From 175c5826084bace77883dc5f6250751bec884821 Mon Sep 17 00:00:00 2001 From: liweiyi <190785909@qq.com> Date: Sun, 17 Mar 2024 20:08:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3customDynamicPageLink()?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=87=AA=E5=AE=9A=E4=B9=89=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E9=A1=B5=E9=9D=A2=E6=95=B0=E6=8D=AE=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/dynamic/listener/DynamicListener.java | 55 +++++++++++++++++++ .../service/impl/DynamicPageHelper.java | 25 +++++++-- .../service/impl/DynamicPageServiceImpl.java | 5 +- 3 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/listener/DynamicListener.java diff --git a/chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/listener/DynamicListener.java b/chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/listener/DynamicListener.java new file mode 100644 index 00000000..b6c91316 --- /dev/null +++ b/chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/listener/DynamicListener.java @@ -0,0 +1,55 @@ +/* + * Copyright 2022-2024 兮玥(190785909@qq.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.chestnut.cms.dynamic.listener; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.chestnut.cms.dynamic.domain.CmsDynamicPage; +import com.chestnut.cms.dynamic.service.IDynamicPageService; +import com.chestnut.common.async.AsyncTaskManager; +import com.chestnut.contentcore.domain.CmsSite; +import com.chestnut.contentcore.listener.event.BeforeSiteDeleteEvent; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class DynamicListener { + + private final IDynamicPageService dynamicPageService; + + @EventListener + public void beforeSiteDelete(BeforeSiteDeleteEvent event) { + CmsSite site = event.getSite(); + int pageSize = 500; + try { + // 删除友链数据 + long total = this.dynamicPageService + .count(new LambdaQueryWrapper().eq(CmsDynamicPage::getSiteId, site.getSiteId())); + for (long i = 0; i * pageSize < total; i++) { + AsyncTaskManager.setTaskProgressInfo((int) (i * pageSize * 100 / total), + "正在删除自定义动态模板页面数据:" + (i * pageSize) + "/" + total); + this.dynamicPageService.remove(new LambdaQueryWrapper().eq(CmsDynamicPage::getSiteId, site.getSiteId()) + .last("limit " + pageSize)); + } + } catch (Exception e) { + AsyncTaskManager.addErrMessage("删除自定义动态模板页面数据错误:" + e.getMessage()); + log.error("Delete dynamic page failed on site[{}] delete.", site.getSiteId()); + } + } +} diff --git a/chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/service/impl/DynamicPageHelper.java b/chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/service/impl/DynamicPageHelper.java index a5b37195..9c93a2ed 100644 --- a/chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/service/impl/DynamicPageHelper.java +++ b/chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/service/impl/DynamicPageHelper.java @@ -15,8 +15,10 @@ */ package com.chestnut.cms.dynamic.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.chestnut.cms.dynamic.core.IDynamicPageInitData; import com.chestnut.cms.dynamic.domain.CmsDynamicPage; +import com.chestnut.cms.dynamic.mapper.CmsDynamicPageMapper; import com.chestnut.common.redis.RedisCache; import com.chestnut.contentcore.config.CMSConfig; import com.chestnut.contentcore.core.IDynamicPageType; @@ -34,13 +36,14 @@ public class DynamicPageHelper { private static final String CACHE_PREFIX = CMSConfig.CachePrefix + "dynamic_page:"; - private final RedisCache redisCache; private final Map dynamicPageInitDataMap; private final Map dynamicPageTypeMap; + private final CmsDynamicPageMapper dynamicPageMapper; + public IDynamicPageInitData getDynamicPageInitData(String type) { return dynamicPageInitDataMap.get(IDynamicPageInitData.BEAN_PREFIX + type); } @@ -50,7 +53,7 @@ public class DynamicPageHelper { if (Objects.nonNull(dynamicPageType)) { return dynamicPageType.getRequestPath(); } - CmsDynamicPage dynamicPage = getDynamicPage(siteId, code); + CmsDynamicPage dynamicPage = getDynamicPageByCode(siteId, code); if (Objects.nonNull(dynamicPage)) { return dynamicPage.getPath(); } @@ -67,10 +70,24 @@ public class DynamicPageHelper { this.redisCache.setCacheObject(CACHE_PREFIX + dynamicPage.getSiteId() + ":" + dynamicPage.getCode(), dynamicPage); } - public CmsDynamicPage getDynamicPage(Long siteId, String path) { + public CmsDynamicPage getDynamicPageByPath(Long siteId, String path) { if (path.startsWith("/")) { path = path.substring(1); } - return redisCache.getCacheObject(CACHE_PREFIX + siteId + ":" + path); + LambdaQueryWrapper q = new LambdaQueryWrapper() + .eq(CmsDynamicPage::getSiteId, siteId) + .eq(CmsDynamicPage::getPath, path); + return redisCache.getCacheObject(CACHE_PREFIX + siteId + ":" + path, () -> + this.dynamicPageMapper.selectOne(q) + ); + } + + public CmsDynamicPage getDynamicPageByCode(Long siteId, String code) { + LambdaQueryWrapper q = new LambdaQueryWrapper() + .eq(CmsDynamicPage::getSiteId, siteId) + .eq(CmsDynamicPage::getCode, code); + return redisCache.getCacheObject(CACHE_PREFIX + siteId + ":" + code, () -> + this.dynamicPageMapper.selectOne(q) + ); } } diff --git a/chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/service/impl/DynamicPageServiceImpl.java b/chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/service/impl/DynamicPageServiceImpl.java index 0d6b9377..8fe900c3 100644 --- a/chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/service/impl/DynamicPageServiceImpl.java +++ b/chestnut-cms/chestnut-cms-dynamic/src/main/java/com/chestnut/cms/dynamic/service/impl/DynamicPageServiceImpl.java @@ -29,7 +29,6 @@ import com.chestnut.common.staticize.core.TemplateContext; import com.chestnut.common.utils.Assert; import com.chestnut.common.utils.IdUtils; import com.chestnut.common.utils.SpringUtils; -import com.chestnut.contentcore.config.CMSConfig; import com.chestnut.contentcore.domain.CmsSite; import com.chestnut.contentcore.service.ISiteService; import com.chestnut.contentcore.service.ITemplateService; @@ -56,8 +55,6 @@ import java.util.*; public class DynamicPageServiceImpl extends ServiceImpl implements IDynamicPageService, CommandLineRunner { - private static final String CACHE_PREFIX = CMSConfig.CachePrefix + "dynamic_page:"; - private final ISiteService siteService; private final ITemplateService templateService; @@ -185,7 +182,7 @@ public class DynamicPageServiceImpl extends ServiceImpl