From 2cc06683916790777073ba815cc8fa43770996c2 Mon Sep 17 00:00:00 2001 From: pengjie <2413927716@qq.com> Date: Thu, 25 Jun 2026 15:50:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(emergency):=20=E6=80=A5=E6=95=91=E5=AE=A3?= =?UTF-8?q?=E6=95=99=E8=B5=84=E6=BA=90=E7=AE=A1=E7=90=86v3=20-=20=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E4=B8=8A=E6=9E=B6=E5=88=86=E7=A6=BB=E3=80=81=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E6=A0=87=E7=AD=BE=E6=A0=91=E5=BD=A2=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - approve()不再自动发布,需单独调用publish()上架 - publish()增加auditStatus=11前置校验 - batchPublish()跳过未审核通过的资源 - 分类管理支持树形结构(listRoot/listChildren/listAll) - listAll返回分类+tags嵌套树 - listChildren返回子分类+标签 - 标签parentId改为必填 - 分类删除校验标签存在 - 分页列表填充resourceCount - 审核记录按审核时间排序 Co-Authored-By: Claude --- .../entity/FirstAidResourceCategory.java | 6 ++ .../FirstAidResourceCategoryController.java | 11 +++- .../FirstAidResourceTagController.java | 34 +++++------ .../FirstAidResourceCategoryMapper.java | 17 +++++- .../IFirstAidResourceCategoryService.java | 24 +++++++- .../FirstAidResourceCategoryServiceImpl.java | 59 +++++++++++++++++-- .../impl/FirstAidResourceServiceImpl.java | 34 +++++------ 7 files changed, 137 insertions(+), 48 deletions(-) diff --git a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResourceCategory.java b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResourceCategory.java index 9366847..498a534 100644 --- a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResourceCategory.java +++ b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResourceCategory.java @@ -1,6 +1,7 @@ package com.renkang.emergency.entity; import java.io.Serializable; +import java.util.List; import com.baomidou.mybatisplus.annotation.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -100,4 +101,9 @@ public class FirstAidResourceCategory implements Serializable { @TableField(exist = false) @Schema(title = "关联资源数量") private Integer resourceCount; + + /** 分类下的标签列表(非持久字段,仅 listWithTags 接口填充) */ + @TableField(exist = false) + @Schema(title = "分类下的标签列表") + private List tags; } diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/FirstAidResourceCategoryController.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/FirstAidResourceCategoryController.java index c514227..29cfd2b 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/FirstAidResourceCategoryController.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/FirstAidResourceCategoryController.java @@ -48,13 +48,14 @@ public class FirstAidResourceCategoryController extends JeecgController> listAll() { - return Result.OK(categoryService.listCategories()); + return Result.OK(categoryService.listCategoriesWithTags()); } @Operation(summary = "急救宣教资源分类-根分类列表") @@ -69,6 +70,12 @@ public class FirstAidResourceCategoryController extends JeecgController> listWithTags() { + return Result.OK(categoryService.listCategoriesWithTags()); + } + @Operation(summary = "急救宣教资源分类-添加") @AutoLog(value = "急救宣教资源分类-添加") //@RequiresPermissions("emergency:firstAidCategory:add") diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/FirstAidResourceTagController.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/FirstAidResourceTagController.java index f97db5c..3723283 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/FirstAidResourceTagController.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/controller/FirstAidResourceTagController.java @@ -59,20 +59,20 @@ public class FirstAidResourceTagController extends JeecgController checkWrapper = new QueryWrapper() .eq("name", entity.getName()) - .eq("type", FirstAidConstants.TYPE_TAG); - if (StrUtil.isNotBlank(entity.getParentId())) { - checkWrapper.eq("parent_id", entity.getParentId()); - } + .eq("type", FirstAidConstants.TYPE_TAG) + .eq("parent_id", entity.getParentId()); if (categoryService.count(checkWrapper) > 0) { return Result.error("标签名称已存在"); } @@ -88,21 +88,21 @@ public class FirstAidResourceTagController extends JeecgController checkWrapper = new QueryWrapper() .eq("name", entity.getName()) .eq("type", FirstAidConstants.TYPE_TAG) + .eq("parent_id", entity.getParentId()) .ne("id", entity.getId()); - if (StrUtil.isNotBlank(entity.getParentId())) { - checkWrapper.eq("parent_id", entity.getParentId()); - } if (categoryService.count(checkWrapper) > 0) { return Result.error("标签名称已存在"); } diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/mapper/FirstAidResourceCategoryMapper.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/mapper/FirstAidResourceCategoryMapper.java index e90048a..607c0ea 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/mapper/FirstAidResourceCategoryMapper.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/mapper/FirstAidResourceCategoryMapper.java @@ -18,9 +18,9 @@ import java.util.List; public interface FirstAidResourceCategoryMapper extends BaseMapper { /** - * 查询某分类下的子分类数量(级联删除校验用) + * 查询某分类下的子分类/标签数量(级联删除校验用,含TYPE=1子分类和TYPE=2标签) */ - @Select("SELECT COUNT(*) FROM QH_EME_FIRST_AID_RESOURCE_CATEGORY WHERE PARENT_ID = #{parentId} AND TYPE = 1 AND DEL_FLAG = 0") + @Select("SELECT COUNT(*) FROM QH_EME_FIRST_AID_RESOURCE_CATEGORY WHERE PARENT_ID = #{parentId} AND DEL_FLAG = 0") Integer countChildrenByParentId(@Param("parentId") String parentId); /** @@ -35,6 +35,18 @@ public interface FirstAidResourceCategoryMapper extends BaseMapper selectAllCategoriesAndTags(); + + /** + * 按父ID查询子节点(含子分类TYPE=1和标签TYPE=2) + */ + @Select("SELECT * FROM QH_EME_FIRST_AID_RESOURCE_CATEGORY WHERE PARENT_ID = #{parentId} AND STATUS = 1 AND DEL_FLAG = 0 ORDER BY TYPE ASC, SORT_NO ASC") + List selectByParentId(@Param("parentId") String parentId); + /** * 按类型查询分类/标签列表 */ @@ -62,4 +74,5 @@ public interface FirstAidResourceCategoryMapper extends BaseMapper selectRootCategories(); + } diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/IFirstAidResourceCategoryService.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/IFirstAidResourceCategoryService.java index 485602f..47b6e3f 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/IFirstAidResourceCategoryService.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/IFirstAidResourceCategoryService.java @@ -14,10 +14,20 @@ import java.util.List; public interface IFirstAidResourceCategoryService extends IService { /** - * 查询所有有效分类(根分类+子分类) + * 查询所有有效分类(扁平,一级分类) */ List listCategories(); + /** + * 查询所有分类和标签(扁平,通过parentId组装树) + */ + List listAllCategoriesAndTags(); + + /** + * 按父ID查询子节点(含子分类和标签,树形展开用) + */ + List listByParentId(String parentId); + /** * 查询根分类列表(树形结构顶层) */ @@ -28,13 +38,23 @@ public interface IFirstAidResourceCategoryService extends IService listChildrenByParentId(String parentId); + /** + * 查询所有有效分类及其下标签(嵌套结构) + */ + List listCategoriesWithTags(); + /** * 查询所有有效标签列表(可按分类筛选) */ List listTags(String parentId); /** - * 删除前校验(分类下有子分类/资源则拒绝;标签有资源引用则拒绝) + * 填充分类列表的资源使用量 + */ + void fillCategoryResourceCounts(List categories); + + /** + * 删除前校验(分类下有标签/资源则拒绝;标签有资源引用则拒绝) */ void deleteWithCheck(String id); } diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidResourceCategoryServiceImpl.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidResourceCategoryServiceImpl.java index 5144520..3631c03 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidResourceCategoryServiceImpl.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidResourceCategoryServiceImpl.java @@ -33,6 +33,36 @@ public class FirstAidResourceCategoryServiceImpl extends ServiceImpl listAllCategoriesAndTags() { + List list = categoryMapper.selectAllCategoriesAndTags(); + for (FirstAidResourceCategory item : list) { + if (FirstAidConstants.TYPE_CATEGORY.equals(item.getType())) { + Integer count = resourceMapper.countByCategoryId(item.getId()); + item.setResourceCount(count != null ? count : 0); + } else { + Integer count = categoryMapper.countResourcesByTagId(item.getId()); + item.setResourceCount(count != null ? count : 0); + } + } + return list; + } + + @Override + public List listByParentId(String parentId) { + List list = categoryMapper.selectByParentId(parentId); + for (FirstAidResourceCategory item : list) { + if (FirstAidConstants.TYPE_CATEGORY.equals(item.getType())) { + Integer count = resourceMapper.countByCategoryId(item.getId()); + item.setResourceCount(count != null ? count : 0); + } else { + Integer count = categoryMapper.countResourcesByTagId(item.getId()); + item.setResourceCount(count != null ? count : 0); + } + } + return list; + } + @Override public List listRootCategories() { List list = categoryMapper.selectRootCategories(); @@ -42,9 +72,23 @@ public class FirstAidResourceCategoryServiceImpl extends ServiceImpl listChildrenByParentId(String parentId) { - List list = categoryMapper.selectChildrenByParentId(parentId); - fillResourceCounts(list); - return list; + // 返回子分类(type=1)和标签(type=2) + return listByParentId(parentId); + } + + @Override + public List listCategoriesWithTags() { + List categories = categoryMapper.selectByType(FirstAidConstants.TYPE_CATEGORY); + fillResourceCounts(categories); + for (FirstAidResourceCategory cat : categories) { + List tags = categoryMapper.selectByTypeAndParent(FirstAidConstants.TYPE_TAG, cat.getId()); + for (FirstAidResourceCategory tag : tags) { + Integer count = categoryMapper.countResourcesByTagId(tag.getId()); + tag.setResourceCount(count != null ? count : 0); + } + cat.setTags(tags); + } + return categories; } @Override @@ -67,6 +111,11 @@ public class FirstAidResourceCategoryServiceImpl extends ServiceImpl categories) { + fillResourceCounts(categories); + } + @Override public void deleteWithCheck(String id) { FirstAidResourceCategory record = getById(id); @@ -75,10 +124,10 @@ public class FirstAidResourceCategoryServiceImpl extends ServiceImpl 0) { - throw new RuntimeException("该分类下存在子分类,无法删除"); + throw new RuntimeException("该分类下存在标签,无法删除"); } // 分类:检查是否有资源 Integer resourceCount = resourceMapper.countByCategoryId(id); diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidResourceServiceImpl.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidResourceServiceImpl.java index 44c1d16..c1116ec 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidResourceServiceImpl.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidResourceServiceImpl.java @@ -141,15 +141,11 @@ public class FirstAidResourceServiceImpl extends ServiceImpl ids) { - Date now = new Date(); - String auditBy = GlobalUtils.getLoginUser().getRealname(); - String auditById = GlobalUtils.getLoginUser().getId(); for (String id : ids) { FirstAidResource resource = getById(id); - if (resource != null) { - resource.setStatus(FirstAidConstants.STATUS_PUBLISHED); - resource.setAuditStatus(FirstAidConstants.AUDIT_STATUS_APPROVED); - resource.setAuditBy(auditBy); - resource.setAuditById(auditById); - resource.setAuditTime(now); - resource.setAuditRejectReason(null); - updateById(resource); + if (resource == null) { + continue; } + if (!FirstAidConstants.AUDIT_STATUS_APPROVED.equals(resource.getAuditStatus())) { + continue; + } + resource.setStatus(FirstAidConstants.STATUS_PUBLISHED); + updateById(resource); } } @@ -344,10 +335,13 @@ public class FirstAidResourceServiceImpl extends ServiceImpl