From 67e42d35c98bdc82db03a12747137ad97e2eb355 Mon Sep 17 00:00:00 2001 From: sunyu Date: Thu, 31 Jul 2025 16:12:04 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=93=81=E7=B1=BB=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/CoscoCategoryMaintenanceMapper.xml | 32 +++++++++++++++++++ src/main/resources/application.yml | 1 + 2 files changed, 33 insertions(+) diff --git a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/mapper/CoscoCategoryMaintenanceMapper.xml b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/mapper/CoscoCategoryMaintenanceMapper.xml index 6be0028..442a71c 100644 --- a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/mapper/CoscoCategoryMaintenanceMapper.xml +++ b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/mapper/CoscoCategoryMaintenanceMapper.xml @@ -16,6 +16,38 @@ + + + + + + + + + + + + INSERT INTO cosco_category_maintenance (`version_id`, `parent_id`, `path`, `category_name`, `code`, `status`) VALUES ( #{categoryMaintenance.versionId},#{categoryMaintenance.parentId},#{categoryMaintenance.path}, diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 830472d..7fa7a02 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -93,6 +93,7 @@ mconfig: app-id: 1 feign: name: + assess: 1 usercenter: 1 tender: 1 rsms: 1 From 42e24af52e317616adb417bb6d76642ab1f7769b Mon Sep 17 00:00:00 2001 From: sunyu Date: Thu, 31 Jul 2025 16:12:18 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=93=81=E7=B1=BB=E7=AE=A1=E7=90=86=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=89=88=E6=9C=AC=E6=97=B6=20=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E5=93=81=E7=B1=BB=E7=88=B6=E7=BA=A7=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CoscoCategoryVersionServiceImpl.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/coscoshipping/ebtp/system/category/version/service/impl/CoscoCategoryVersionServiceImpl.java b/src/main/java/com/coscoshipping/ebtp/system/category/version/service/impl/CoscoCategoryVersionServiceImpl.java index abf312b..343fdd2 100644 --- a/src/main/java/com/coscoshipping/ebtp/system/category/version/service/impl/CoscoCategoryVersionServiceImpl.java +++ b/src/main/java/com/coscoshipping/ebtp/system/category/version/service/impl/CoscoCategoryVersionServiceImpl.java @@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest; import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl; +import com.chinaunicom.mall.ebtp.common.util.PropertyUtils; import com.coscoshipping.ebtp.system.category.maintenance.dao.CoscoCategoryMaintenanceMapper; import com.coscoshipping.ebtp.system.category.maintenance.entity.CoscoCategoryMaintenance; +import com.coscoshipping.ebtp.system.category.maintenance.service.ICoscoCategoryMaintenanceService; import com.coscoshipping.ebtp.system.category.version.dao.CoscoCategoryVersionMapper; import com.coscoshipping.ebtp.system.category.version.entity.CoscoCategoryVersion; import com.coscoshipping.ebtp.system.category.version.entity.CoscoCategoryVersionVO; @@ -33,6 +35,9 @@ public class CoscoCategoryVersionServiceImpl extends BaseServiceImpl getList(Long versionId){ List list = new ArrayList<>(); CoscoCategoryMaintenance categoryMaintenance = new CoscoCategoryMaintenance(); + categoryMaintenance.setId(Long.valueOf(PropertyUtils.getSnowflakeId())); categoryMaintenance.setCategoryName("货物"); categoryMaintenance.setParentId(0L); categoryMaintenance.setCode("A"); @@ -96,6 +103,7 @@ public class CoscoCategoryVersionServiceImpl extends BaseServiceImpl Date: Thu, 31 Jul 2025 16:12:43 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=93=81=E7=B1=BB=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/CoscoCategoryMaintenanceMapper.java | 20 ++++ .../mapper/CoscoCategoryMaintenanceMapper.xml | 4 +- .../CoscoCategoryMaintenanceServiceImpl.java | 94 ++++++++++++++++++- .../dao/mapper/CoscoCategoryVersionMapper.xml | 7 ++ 4 files changed, 119 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/CoscoCategoryMaintenanceMapper.java b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/CoscoCategoryMaintenanceMapper.java index d9ee8f1..1f47fd1 100644 --- a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/CoscoCategoryMaintenanceMapper.java +++ b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/CoscoCategoryMaintenanceMapper.java @@ -15,6 +15,26 @@ import java.util.List; */ public interface CoscoCategoryMaintenanceMapper extends IBaseMapper { + + /** + * 模糊查询品类名称匹配的节点 + */ + List findByCategoryNameLike(@Param("categoryName") String categoryName, + @Param("versionId") Long versionId, + @Param("code") String code); + + + /** + * 根据父ID查询节点(用于递归找父级) + */ + CoscoCategoryMaintenanceVO findByParentId(@Param("parentId") Long parentId, @Param("versionId") Long versionId); + + /** + * 批量查询节点(用于加载收集到的所有节点) + */ + List findAllByIds(@Param("ids") List ids, @Param("versionId") Long versionId); + + List findAllByParentId(@Param("parentId") Long parentId,@Param("versionId") Long versionId); void saveData(@Param("categoryMaintenance") CoscoCategoryMaintenance categoryMaintenance); diff --git a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/mapper/CoscoCategoryMaintenanceMapper.xml b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/mapper/CoscoCategoryMaintenanceMapper.xml index 442a71c..be2038d 100644 --- a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/mapper/CoscoCategoryMaintenanceMapper.xml +++ b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/dao/mapper/CoscoCategoryMaintenanceMapper.xml @@ -83,9 +83,9 @@ INSERT INTO cosco_category_maintenance - (version_id, parent_id,category_name,code,status) VALUES + (id,version_id, parent_id,category_name,code,status) VALUES - (#{item.versionId}, #{item.parentId},#{item.categoryName},#{item.code},#{item.status}) + (#{item.id},#{item.versionId}, #{item.parentId},#{item.categoryName},#{item.code},#{item.status}) diff --git a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/service/impl/CoscoCategoryMaintenanceServiceImpl.java b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/service/impl/CoscoCategoryMaintenanceServiceImpl.java index ef4e888..29f6999 100644 --- a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/service/impl/CoscoCategoryMaintenanceServiceImpl.java +++ b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/service/impl/CoscoCategoryMaintenanceServiceImpl.java @@ -1,6 +1,7 @@ package com.coscoshipping.ebtp.system.category.maintenance.service.impl; +import com.alibaba.nacos.common.utils.CollectionUtils; import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest; import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl; import com.coscoshipping.ebtp.system.category.maintenance.dao.CoscoCategoryMaintenanceMapper; @@ -12,10 +13,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 对数据表 cosco_category_maintenance 操作的 serviceImpl @@ -63,9 +66,92 @@ public class CoscoCategoryMaintenanceServiceImpl extends BaseServiceImpl getList(CoscoCategoryMaintenanceVO coscoCategoryMaintenanceVO) { - List roots = coscoCategoryMaintenanceMapper.findAllByParentId(0L,coscoCategoryMaintenanceVO.getVersionId()); - roots.forEach(this::loadChildren); - return roots; + String categoryName = coscoCategoryMaintenanceVO.getCategoryName(); + String code = coscoCategoryMaintenanceVO.getCode(); + Long versionId = coscoCategoryMaintenanceVO.getVersionId(); + List result = new ArrayList<>(); + + if (StringUtils.isNotBlank(categoryName) || StringUtils.isNotBlank(code)) { + // 存储已匹配的节点 ID(用于去重) + Set matchedIds = new HashSet<>(); + List matchedNodes = new ArrayList<>(); + + // 1. 品类名称模糊查询 + if (StringUtils.isNotBlank(categoryName) || StringUtils.isNotBlank(code)) { + List nameMatches = coscoCategoryMaintenanceMapper.findByCategoryNameLike(categoryName, versionId,code); + for (CoscoCategoryMaintenanceVO node : nameMatches) { + if (!matchedIds.contains(node.getId())) { + matchedIds.add(node.getId()); + matchedNodes.add(node); + } + } + } + + if (CollectionUtils.isEmpty(matchedNodes)) { + return result; // 无匹配结果,直接返回空列表 + } + + // 3. 递归收集所有匹配节点的父级(包括自身) + Set collectedIds = new HashSet<>(); + for (CoscoCategoryMaintenanceVO node : matchedNodes) { + collectAncestors(node, collectedIds, versionId); + } + + // 4. 批量查询所有收集到的节点(避免重复查询) + List allNodes = coscoCategoryMaintenanceMapper.findAllByIds( + new ArrayList<>(collectedIds), versionId + ); + if (CollectionUtils.isEmpty(allNodes)) { + return result; + } + + // 5. 构建树形结构(按 parentId 分组子节点) + Map> parentMap = allNodes.stream() + .filter(n -> n.getParentId() != null) // 过滤空父ID + .collect(Collectors.groupingBy(CoscoCategoryMaintenanceVO::getParentId)); + + // 6. 找到根节点(parentId = 0 或 null)并递归加载子节点 + List roots = allNodes.stream() + .filter(n -> n.getParentId() == null || n.getParentId() == 0) + .collect(Collectors.toList()); + for (CoscoCategoryMaintenanceVO root : roots) { + loadChildrenForFiltered(root, parentMap); // 递归加载子节点 + } + result = roots; + } else { + // 无搜索条件时,加载所有根节点并递归子节点(原逻辑) + List roots = coscoCategoryMaintenanceMapper.findAllByParentId(0L, versionId); + roots.forEach(this::loadChildren); + result = roots; + } + return result; + } + + /** + * 递归收集节点的所有父级(包括自身) + */ + private void collectAncestors(CoscoCategoryMaintenanceVO node, Set collectedIds, Long versionId) { + if (node == null || collectedIds.contains(node.getId())) { + return; + } + collectedIds.add(node.getId()); // 收集当前节点 + // 递归查询父节点 + CoscoCategoryMaintenanceVO parent = coscoCategoryMaintenanceMapper.findByParentId(node.getParentId(), versionId); + if (parent != null) { + collectAncestors(parent, collectedIds, versionId); + } + } + + /** + * 为过滤后的节点递归加载子节点 + */ + private void loadChildrenForFiltered(CoscoCategoryMaintenanceVO vo, Map> parentMap) { + List children = parentMap.getOrDefault(vo.getId(), Collections.emptyList()); + vo.setChildren(children); + // 递归加载子节点的子节点 + for (CoscoCategoryMaintenanceVO child : children) { + loadChildrenForFiltered(child, parentMap); + } } private void loadChildren(CoscoCategoryMaintenanceVO vo) { diff --git a/src/main/java/com/coscoshipping/ebtp/system/category/version/dao/mapper/CoscoCategoryVersionMapper.xml b/src/main/java/com/coscoshipping/ebtp/system/category/version/dao/mapper/CoscoCategoryVersionMapper.xml index e2317eb..a67b9c6 100644 --- a/src/main/java/com/coscoshipping/ebtp/system/category/version/dao/mapper/CoscoCategoryVersionMapper.xml +++ b/src/main/java/com/coscoshipping/ebtp/system/category/version/dao/mapper/CoscoCategoryVersionMapper.xml @@ -31,6 +31,13 @@