修正customDynamicPageLink()获取自定义动态模板页面数据异常

This commit is contained in:
liweiyi 2024-03-17 20:08:07 +08:00
parent 582c7bdc06
commit 175c582608
3 changed files with 77 additions and 8 deletions

View File

@ -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<CmsDynamicPage>().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<CmsDynamicPage>().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());
}
}
}

View File

@ -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<String, IDynamicPageInitData> dynamicPageInitDataMap;
private final Map<String, IDynamicPageType> 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<CmsDynamicPage> q = new LambdaQueryWrapper<CmsDynamicPage>()
.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<CmsDynamicPage> q = new LambdaQueryWrapper<CmsDynamicPage>()
.eq(CmsDynamicPage::getSiteId, siteId)
.eq(CmsDynamicPage::getCode, code);
return redisCache.getCacheObject(CACHE_PREFIX + siteId + ":" + code, () ->
this.dynamicPageMapper.selectOne(q)
);
}
}

View File

@ -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<CmsDynamicPageMapper, CmsDynamicPage>
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<CmsDynamicPageMapper, Cm
this.catchException("/", response, new RuntimeException("Site not found: " + siteId));
return;
}
CmsDynamicPage dynamicPage = dynamicPageHelper.getDynamicPage(siteId, requestURI);
CmsDynamicPage dynamicPage = dynamicPageHelper.getDynamicPageByPath(siteId, requestURI);
String template = dynamicPage.getTemplates().get(publishPipeCode);
File templateFile = this.templateService.findTemplateFile(site, template, publishPipeCode);
if (Objects.isNull(templateFile) || !templateFile.exists()) {