fix(cms): 处理栏目模型为null的情况并添加日志警告

- CmsArticleServiceImpl中新增@Slf4j注解支持日志输出
- 保存文章时,增加cmsNavigation.getModelInfo()为null的判断,避免空指针异常
- 模型信息不存在时,记录警告日志提醒栏目未关联模型
- 修正CmsNavigationServiceImpl中获取模型信息时的null处理
- 只有模型信息不为空且banner为空时才赋值栏目banner和mpBanner
- 增强代码健壮性,避免空模型导致相关操作失败或异常
This commit is contained in:
2026-07-18 20:49:37 +08:00
parent df161c25c9
commit 79b3575043
2 changed files with 21 additions and 9 deletions

View File

@@ -18,6 +18,7 @@ import com.gxwebsoft.common.core.utils.RedisUtil;
import com.gxwebsoft.common.core.web.PageParam;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.system.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -37,6 +38,7 @@ import static com.gxwebsoft.common.core.constants.ArticleConstants.CACHE_KEY_ART
* @author 科技小王子
* @since 2024-09-10 20:47:57
*/
@Slf4j
@Service
public class CmsArticleServiceImpl extends ServiceImpl<CmsArticleMapper, CmsArticle> implements CmsArticleService {
@Resource
@@ -145,7 +147,10 @@ public class CmsArticleServiceImpl extends ServiceImpl<CmsArticleMapper, CmsArti
try {
// 保存文章模型
final CmsNavigation cmsNavigation = cmsNavigationService.getByIdRel(article.getCategoryId());
final CmsModel modelInfo = cmsNavigation.getModelInfo();
final CmsModel modelInfo = cmsNavigation != null ? cmsNavigation.getModelInfo() : null;
if (modelInfo == null) {
log.warn("栏目 {} 未关联到模型,跳过模型详情设置", article.getCategoryId());
} else {
final String componentDetail = modelInfo.getComponentDetail();
if (ObjectUtil.isNotEmpty(componentDetail)) {
final String[] split = componentDetail.split("/");
@@ -156,6 +161,7 @@ public class CmsArticleServiceImpl extends ServiceImpl<CmsArticleMapper, CmsArti
article.setDetail(split[2]);
}
}
}
// 是否密码可见
if (article.getPermission() != null && article.getPermission() == PERMISSION_PASSWORD) {
article.setPassword(userService.encodePassword(article.getPassword()));
@@ -193,6 +199,9 @@ public class CmsArticleServiceImpl extends ServiceImpl<CmsArticleMapper, CmsArti
// 模型信息
if (ObjectUtil.isNotEmpty(cmsNavigation)) {
final CmsModel modelInfo = cmsNavigation.getModelInfo();
if (modelInfo == null) {
log.warn("栏目 {} 未关联到模型,跳过模型详情设置", article.getCategoryId());
} else {
final String componentDetail = modelInfo.getComponentDetail();
if (ObjectUtil.isNotEmpty(componentDetail)) {
final String[] split = componentDetail.split("/");
@@ -204,6 +213,7 @@ public class CmsArticleServiceImpl extends ServiceImpl<CmsArticleMapper, CmsArti
}
}
}
}
// 修正父级栏目ID
if (article.getParentId().equals(0)) {
final CmsNavigation current = cmsNavigationService.getById(article.getCategoryId());

View File

@@ -76,10 +76,11 @@ public class CmsNavigationServiceImpl extends ServiceImpl<CmsNavigationMapper, C
navigation.setDesign(cmsDesignService.getOne(new LambdaQueryWrapper<CmsDesign>().eq(CmsDesign::getCategoryId, navigation.getNavigationId()).last("limit 1")));
// 所属模型
if (StrUtil.isNotBlank(navigation.getModel())) {
navigation.setModelInfo(cmsModelService.getOne(new LambdaQueryWrapper<CmsModel>().eq(CmsModel::getModel, navigation.getModel()).last("limit 1")));
if (StrUtil.isBlank(navigation.getBanner())) {
navigation.setBanner(navigation.getModelInfo().getBanner());
navigation.setMpBanner(navigation.getModelInfo().getThumb());
final CmsModel modelInfo = cmsModelService.getOne(new LambdaQueryWrapper<CmsModel>().eq(CmsModel::getModel, navigation.getModel()).last("limit 1"));
navigation.setModelInfo(modelInfo);
if (modelInfo != null && StrUtil.isBlank(navigation.getBanner())) {
navigation.setBanner(modelInfo.getBanner());
navigation.setMpBanner(modelInfo.getThumb());
}
}
return navigation;
@@ -178,10 +179,11 @@ public class CmsNavigationServiceImpl extends ServiceImpl<CmsNavigationMapper, C
navigation.setDesign(cmsDesignService.getOne(new LambdaQueryWrapper<CmsDesign>().eq(CmsDesign::getCategoryId, navigation.getNavigationId()).last("limit 1")));
// 所属模型
if (StrUtil.isNotBlank(navigation.getModel())) {
navigation.setModelInfo(cmsModelService.getOne(new LambdaQueryWrapper<CmsModel>().eq(CmsModel::getModel, navigation.getModel()).last("limit 1")));
if (StrUtil.isBlank(navigation.getBanner())) {
navigation.setBanner(navigation.getModelInfo().getBanner());
navigation.setMpBanner(navigation.getModelInfo().getThumb());
final CmsModel modelInfo = cmsModelService.getOne(new LambdaQueryWrapper<CmsModel>().eq(CmsModel::getModel, navigation.getModel()).last("limit 1"));
navigation.setModelInfo(modelInfo);
if (modelInfo != null && StrUtil.isBlank(navigation.getBanner())) {
navigation.setBanner(modelInfo.getBanner());
navigation.setMpBanner(modelInfo.getThumb());
}
}
return navigation;