diff --git a/pom.xml b/pom.xml index 192dc51..923d089 100644 --- a/pom.xml +++ b/pom.xml @@ -73,6 +73,24 @@ 3.1.0 + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-seata + + + + + io.seata + seata-spring-boot-starter + 1.6.1 + + diff --git a/src/main/java/com/coscoshipping/ebtp/system/SysManagerEbtpProjectApplication.java b/src/main/java/com/coscoshipping/ebtp/system/SysManagerEbtpProjectApplication.java index c9797ee..0c66b36 100644 --- a/src/main/java/com/coscoshipping/ebtp/system/SysManagerEbtpProjectApplication.java +++ b/src/main/java/com/coscoshipping/ebtp/system/SysManagerEbtpProjectApplication.java @@ -1,13 +1,10 @@ package com.coscoshipping.ebtp.system; -import io.micrometer.core.instrument.MeterRegistry; import org.mybatis.spring.annotation.MapperScan; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; -import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @@ -16,6 +13,7 @@ import org.springframework.context.annotation.ComponentScan; @MapperScan({"com.coscoshipping.ebtp.system.**.dao", "com.chinaunicom.mall.ebtp.**.dao" }) @ComponentScan(basePackages = { "com.coscoshipping.ebtp.system.*", "com.chinaunicom.mall.ebtp.cloud.*", "com.chinaunicom.mall.ebtp.*" }) +@EnableDiscoveryClient public class SysManagerEbtpProjectApplication { public static void main(String[] args) { @@ -23,16 +21,4 @@ public class SysManagerEbtpProjectApplication { System.out.println("启动成功!"); } - /** - * Grafana 注册项 - * - * @param applicationName 应用名称, 用于grafana应用列表 - * @return - */ - @Bean - public MeterRegistryCustomizer configurer( - @Value("${spring.application.name}") String applicationName) { - return (registry) -> registry.config().commonTags("application", applicationName); - } - } 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 d708b57..ed94838 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 9a30f9e..04588e0 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 @@ -17,6 +17,38 @@ + + + + + + + + + + + + INSERT INTO cosco_category_maintenance (`version_id`, `parent_id`, `path`, `path_name`, `category_name`, `code`, `status`) VALUES ( #{categoryMaintenance.versionId},#{categoryMaintenance.parentId},#{categoryMaintenance.path}, @@ -52,9 +84,9 @@ INSERT INTO cosco_category_maintenance - (version_id, parent_id, path, path_name, category_name,code,status) VALUES + (id,version_id, parent_id, path, path_name, category_name,code,status) VALUES - (#{item.versionId}, #{item.parentId}, #{item.path}, #{item.pathName}, #{item.categoryName},#{item.code},#{item.status}) + (#{item.id},#{item.versionId}, #{item.parentId}, #{item.path}, #{item.pathName}, #{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 ac13858..bbe3cc1 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 @@