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 @@