From 740fe21d346a932c2596700ba71263a85338226e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=80=A1?= Date: Thu, 31 Jul 2025 15:27:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD=EF=BC=9A?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=89=80=E6=9C=89=E6=95=B0=E6=8D=AE=E7=9A=84?= =?UTF-8?q?path=E5=92=8Cpath=5Fname=E5=AD=97=E6=AE=B5=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=93=81=E7=B1=BB=E7=BB=B4=E6=8A=A4=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E8=B7=AF=E5=BE=84=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E7=9A=84=E7=94=9F=E6=88=90=E4=B8=8E=E6=9B=B4=E6=96=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CoscoCategoryMaintenanceController.java | 13 ++ .../dao/CoscoCategoryMaintenanceMapper.java | 8 ++ .../mapper/CoscoCategoryMaintenanceMapper.xml | 17 ++- .../entity/CoscoCategoryMaintenance.java | 6 + .../ICoscoCategoryMaintenanceService.java | 7 + .../CoscoCategoryMaintenanceServiceImpl.java | 122 ++++++++++++++++++ 6 files changed, 168 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/controller/CoscoCategoryMaintenanceController.java b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/controller/CoscoCategoryMaintenanceController.java index ec9422e..f547bae 100644 --- a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/controller/CoscoCategoryMaintenanceController.java +++ b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/controller/CoscoCategoryMaintenanceController.java @@ -113,4 +113,17 @@ public class CoscoCategoryMaintenanceController{ return BaseResponse.success(coscoCategoryMaintenanceService.getList(coscoCategoryMaintenanceVO)); } + + /** + * 更新所有数据的path和path_name字段 + * + * @param versionId 版本ID + * @return 返回结果 + */ + @ApiOperation("更新所有数据的path和path_name字段") + @GetMapping("/updatePathAndPathName/{versionId}") + public BaseResponse updatePathAndPathName(@ApiParam(value = "版本ID", required = true) @PathVariable Long versionId) { + + return BaseResponse.success(coscoCategoryMaintenanceService.updateAllPathAndPathName(versionId)); + } } 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 1f47fd1..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 @@ -51,4 +51,12 @@ public interface CoscoCategoryMaintenanceMapper extends IBaseMapper + @@ -49,15 +50,15 @@ - INSERT INTO cosco_category_maintenance (`version_id`, `parent_id`, `path`, `category_name`, `code`, `status`) + INSERT INTO cosco_category_maintenance (`version_id`, `parent_id`, `path`, `path_name`, `category_name`, `code`, `status`) VALUES ( #{categoryMaintenance.versionId},#{categoryMaintenance.parentId},#{categoryMaintenance.path}, - #{categoryMaintenance.categoryName},#{categoryMaintenance.code},#{categoryMaintenance.status}); + #{categoryMaintenance.pathName},#{categoryMaintenance.categoryName},#{categoryMaintenance.code},#{categoryMaintenance.status}); UPDATE cosco_category_maintenance SET `version_id` = #{categoryMaintenance.versionId}, `parent_id` = #{categoryMaintenance.parentId}, - `path` = #{categoryMaintenance.path}, `category_name` = #{categoryMaintenance.categoryName}, + `path` = #{categoryMaintenance.path}, `path_name` = #{categoryMaintenance.pathName}, `category_name` = #{categoryMaintenance.categoryName}, `code` = #{categoryMaintenance.code}, `status` = #{categoryMaintenance.status} WHERE `id` = #{categoryMaintenance.id}; @@ -83,10 +84,16 @@ INSERT INTO cosco_category_maintenance - (id,version_id, parent_id,category_name,code,status) VALUES + (id,version_id, parent_id, path, path_name, category_name,code,status) VALUES - (#{item.id},#{item.versionId}, #{item.parentId},#{item.categoryName},#{item.code},#{item.status}) + (#{item.id},#{item.versionId}, #{item.parentId}, #{item.path}, #{item.pathName}, #{item.categoryName},#{item.code},#{item.status}) + + UPDATE cosco_category_maintenance + SET path = #{path}, path_name = #{pathName} + WHERE id = #{id} + + diff --git a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/entity/CoscoCategoryMaintenance.java b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/entity/CoscoCategoryMaintenance.java index 2d9c33f..569a82f 100644 --- a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/entity/CoscoCategoryMaintenance.java +++ b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/entity/CoscoCategoryMaintenance.java @@ -53,6 +53,12 @@ public class CoscoCategoryMaintenance implements Serializable { @ApiModelProperty(value = "路径") private String path; + /** + * 路径名称(从根到当前节点的所有category_name,以逗号分隔) + */ + @ApiModelProperty(value = "路径名称") + private String pathName; + /** * 品类名称 */ diff --git a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/service/ICoscoCategoryMaintenanceService.java b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/service/ICoscoCategoryMaintenanceService.java index 2b373d4..91ee8b6 100644 --- a/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/service/ICoscoCategoryMaintenanceService.java +++ b/src/main/java/com/coscoshipping/ebtp/system/category/maintenance/service/ICoscoCategoryMaintenanceService.java @@ -30,4 +30,11 @@ public interface ICoscoCategoryMaintenanceService extends IBaseService queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(CoscoCategoryMaintenance::getVersionId, versionId) + .eq(CoscoCategoryMaintenance::getParentId, 0L); + + List rootNodes = this.list(queryWrapper); + + // 递归更新每个根节点及其子节点的path和path_name + for (CoscoCategoryMaintenance rootNode : rootNodes) { + updateNodePathAndPathName(rootNode, versionId); + } + + return true; + } + + /** + * 递归更新节点的path和path_name + * @param node 当前节点 + * @param versionId 版本ID + */ + private void updateNodePathAndPathName(CoscoCategoryMaintenance node, Long versionId) { + // 生成当前节点的path和path_name + String path = generatePath(node, versionId); + String pathName = generatePathName(node, versionId); + + // 更新数据库 + coscoCategoryMaintenanceMapper.updatePathAndPathName(node.getId(), path, pathName); + + // 查询子节点 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(CoscoCategoryMaintenance::getVersionId, versionId) + .eq(CoscoCategoryMaintenance::getParentId, node.getId()); + + List children = this.list(queryWrapper); + + // 递归更新子节点 + for (CoscoCategoryMaintenance child : children) { + updateNodePathAndPathName(child, versionId); + } + } + + /** + * 生成节点的path + * @param node 当前节点 + * @param versionId 版本ID + * @return path字符串 + */ + private String generatePath(CoscoCategoryMaintenance node, Long versionId) { + if (node.getParentId() == null || node.getParentId() == 0L) { + return node.getId().toString(); + } + + // 查询父节点 + CoscoCategoryMaintenance parent = this.getById(node.getParentId()); + if (parent != null) { + return generatePath(parent, versionId) + "," + node.getId(); + } + + return node.getId().toString(); + } + + /** + * 生成节点的path_name + * @param node 当前节点 + * @param versionId 版本ID + * @return path_name字符串 + */ + private String generatePathName(CoscoCategoryMaintenance node, Long versionId) { + if (node.getParentId() == null || node.getParentId() == 0L) { + return node.getCategoryName(); + } + + // 查询父节点 + CoscoCategoryMaintenance parent = this.getById(node.getParentId()); + if (parent != null) { + return generatePathName(parent, versionId) + "," + node.getCategoryName(); + } + + return node.getCategoryName(); + } }