From 3f44dae2e6ccfdc5d1211b3cc92ed2976434f953 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=B1=B3?= <470431449@qq.com> Date: Thu, 6 Feb 2025 17:12:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BA=E5=9F=9F=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/BaseAreaController.java | 17 ++- .../admin/pojo/query/BaseAreaQuery.java | 14 +++ .../admin/service/AdminBaseAreaService.java | 108 ++++++++++++++++++ .../common/pojo/vo/TBaseAreaVO.java | 6 + .../main/resources/mapper/TBaseAreaMapper.xml | 8 +- 5 files changed, 146 insertions(+), 7 deletions(-) create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/query/BaseAreaQuery.java create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminBaseAreaService.java diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/BaseAreaController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/BaseAreaController.java index 3d2a3f75..82f7bd3c 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/BaseAreaController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/BaseAreaController.java @@ -5,7 +5,9 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.mobilebroken.admin.pojo.dto.BaseAreaEditDTO; +import com.nflg.mobilebroken.admin.pojo.query.BaseAreaQuery; import com.nflg.mobilebroken.admin.pojo.query.DepartmentQuery; +import com.nflg.mobilebroken.admin.service.AdminBaseAreaService; import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.PageData; @@ -33,6 +35,9 @@ public class BaseAreaController extends ControllerBase { @Resource ITBaseAreaService baseAreaService; + @Resource + AdminBaseAreaService adminBaseAreaService; + /** * 获取区域列表 * @param query @@ -40,10 +45,9 @@ public class BaseAreaController extends ControllerBase { */ @PostMapping("getList") @MethodInfoMark(value = "获取区域列表" ,menuName = "区域管理") - public ApiResult> getList(@RequestBody DepartmentQuery query){ - Page result = baseAreaService.getList(new Page<>(query.getPage(),query.getPageSize()), query); - - return ApiResult.success(result.getRecords(),query,result.getTotal()); + public ApiResult> getList(@RequestBody BaseAreaQuery query){ +// + return adminBaseAreaService.getList(query); } /** @@ -78,7 +82,7 @@ public class BaseAreaController extends ControllerBase { ent.setDataModifyUserNo(AdminUserUtil.getUserNo()); ent.setDataModifyUserName(AdminUserUtil.getUserName()); ent.setDataModifyTime(LocalDateTime.now()); - ent.setAreaCode(StrUtil.padPre(count.toString(),3,"0")); + ent.setAreaCode(StrUtil.padPre(count.toString(),6,"0")); baseAreaService.save(ent); return ApiResult.success(true); @@ -97,6 +101,9 @@ public class BaseAreaController extends ControllerBase { VUtils.trueThrowBusinessError(Objects.isNull(oldEnt)).throwMessage("区域不存在"); oldEnt.setParentAreaRowId(baseAreaEditDTO.getParentAreaRowId()); oldEnt.setAreaName(baseAreaEditDTO.getAreaName()); + oldEnt.setDataModifyUserNo(AdminUserUtil.getUserNo()); + oldEnt.setDataModifyUserName(AdminUserUtil.getUserName()); + oldEnt.setDataModifyTime(LocalDateTime.now()); baseAreaService.updateById(oldEnt); return ApiResult.success(true); diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/query/BaseAreaQuery.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/query/BaseAreaQuery.java new file mode 100644 index 00000000..eb8560e2 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/query/BaseAreaQuery.java @@ -0,0 +1,14 @@ +package com.nflg.mobilebroken.admin.pojo.query; + + +import com.nflg.mobilebroken.common.pojo.query.PageBaseQuery; +import lombok.Data; + +@Data +public class BaseAreaQuery extends PageBaseQuery { + + /** + * 区域编码or 名称 + */ + private String areaCodeOrName; +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminBaseAreaService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminBaseAreaService.java new file mode 100644 index 00000000..75782455 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminBaseAreaService.java @@ -0,0 +1,108 @@ +package com.nflg.mobilebroken.admin.service; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nflg.mobilebroken.admin.pojo.query.BaseAreaQuery; +import com.nflg.mobilebroken.admin.pojo.query.DepartmentQuery; +import com.nflg.mobilebroken.admin.pojo.vo.BaseDepartmentVO; +import com.nflg.mobilebroken.common.pojo.ApiResult; +import com.nflg.mobilebroken.common.pojo.PageData; +import com.nflg.mobilebroken.common.pojo.vo.TBaseAreaVO; +import com.nflg.mobilebroken.repository.entity.TBaseArea; +import com.nflg.mobilebroken.repository.entity.TBaseDepartment; +import com.nflg.mobilebroken.repository.service.ITBaseAreaService; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestBody; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class AdminBaseAreaService { + + @Resource + ITBaseAreaService baseAreaService; + + public ApiResult> getList(@RequestBody BaseAreaQuery query){ + Page result = baseAreaService.getList(new Page<>(query.getPage(),query.getPageSize()), query); + List dataResult = Convert.toList(TBaseAreaVO.class, result); + if(StrUtil.isNotBlank(query.getAreaCodeOrName())){ + List allAreaList = Convert.toList(TBaseAreaVO.class,baseAreaService.lambdaQuery().eq(TBaseArea::getAreaState,1).list()) ; + Map collect = allAreaList.stream().collect(Collectors.toMap(TBaseAreaVO::getRowId, Function.identity())); + List allParents=new ArrayList<>(); + for (TBaseAreaVO data:dataResult){ + allParents.addAll(getAllParents(data, collect)) ; + } + allParents.addAll(dataResult); + return ApiResult.success(buildTree(allParents),query,result.getTotal()); + } + else { + for (TBaseAreaVO data:dataResult){ + initNodeChildren(data); + } + } + return ApiResult.success(dataResult,query,result.getTotal()); + } + + private void initNodeChildren(TBaseAreaVO node) { + List immediateChildren = findChildDepartmentsByParentId(node.getRowId()); + node.setChildren(immediateChildren); + for (TBaseAreaVO child : immediateChildren) { + initNodeChildren(child); + } + } + + private List findChildDepartmentsByParentId(Long parentId) { + List areas = baseAreaService.lambdaQuery().eq(TBaseArea::getParentAreaRowId, parentId).eq(TBaseArea::getAreaState,1).list(); + return Convert.toList(TBaseAreaVO.class,areas); + } + + + private List getAllParents(TBaseAreaVO node, Map idToNodeMap) { + List parents = new ArrayList<>(); + Long parentId = node.getParentAreaRowId(); + while (parentId != null && parentId>0) { + TBaseAreaVO parentNode = idToNodeMap.get(parentId); + if (parentNode == null) break; // 防止数据不一致导致无限循环 + parents.add(parentNode); + parentId = parentNode.getParentAreaRowId(); // 移动到上一级 + } + Collections.reverse(parents); // 如果需要从根节点开始排序,则反转列表 + return parents; + } + + /** + * list 构建树 + * @param nodes + * @return + */ + private List buildTree(List nodes) { + // 使用Map存储id到Node的映射,便于快速查找父节点 + Map idToNodeMap = nodes.stream() + .collect(Collectors.toMap(TBaseAreaVO::getRowId, Function.identity())); + + List roots = new ArrayList<>(); + + for (TBaseAreaVO node : nodes) { + TBaseAreaVO parent = idToNodeMap.get(node.getParentAreaRowId()); + if (parent != null) { + if(null==parent.getChildren()) { + parent.setChildren(new ArrayList<>()); + } + // 如果有父节点,则添加到父节点的孩子列表中 + parent.getChildren().add(node); + } else { + // 没有父节点则为根节点 + roots.add(node); + } + } + + return roots; + } +} diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TBaseAreaVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TBaseAreaVO.java index b9361b72..89995c3a 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TBaseAreaVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TBaseAreaVO.java @@ -6,6 +6,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.time.LocalDateTime; +import java.util.List; /** *

@@ -76,4 +77,9 @@ public class TBaseAreaVO implements Serializable { * 最近修改时间 */ private LocalDateTime dataModifyTime; + + /** + * 子级列表 + */ + private List children; } diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TBaseAreaMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TBaseAreaMapper.xml index f63822ca..71c4db8d 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TBaseAreaMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TBaseAreaMapper.xml @@ -3,7 +3,7 @@ - + and (area_code =#{query.areaCodeOrName} or area_name = #{query.areaCodeOrName} ) @@ -12,7 +12,11 @@