diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DepartmentController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DepartmentController.java index 9e5de5f6..cae7a319 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DepartmentController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DepartmentController.java @@ -2,11 +2,15 @@ package com.nflg.mobilebroken.admin.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.extra.tokenizer.TokenizerUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.mobilebroken.admin.pojo.dto.DepartmentDTO; import com.nflg.mobilebroken.admin.pojo.query.DepartmentQuery; +import com.nflg.mobilebroken.admin.pojo.vo.BaseDepartmentVO; +import com.nflg.mobilebroken.admin.service.AdminDepartmentService; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.PageData; +import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.repository.entity.TBaseDepartment; import com.nflg.mobilebroken.repository.service.ITBaseDepartmentService; @@ -15,6 +19,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; +import java.time.LocalDateTime; import java.util.List; /** @@ -27,16 +32,20 @@ public class DepartmentController extends ControllerBase { @Resource ITBaseDepartmentService departmentService; + @Resource + AdminDepartmentService adminDepartmentService; + /** * 获取部门列表 * @param query * @return */ @PostMapping("getList") - @MethodInfoMark(value = "获取部件列表",menuName = "部门管理") - public ApiResult> getList(@RequestBody DepartmentQuery query){ - Page result = departmentService.selectListByPage(query); - return ApiResult.success(result.getRecords(),query,result.getTotal()); + public ApiResult> getList(@RequestBody DepartmentQuery query){ + + return adminDepartmentService.getList(query); + + } /** @@ -62,8 +71,14 @@ public class DepartmentController extends ControllerBase { List checkCode = departmentService.lambdaQuery().eq(TBaseDepartment::getDeptCode, departmentDTO.getDeptCode()).list(); VUtils.trueThrowBusinessError(CollUtil.isNotEmpty(checkCode)).throwMessage("编码已存在"); - - departmentService.saveDepartment(Convert.convert(TBaseDepartment.class,departmentDTO)); + TBaseDepartment dept = Convert.convert(TBaseDepartment.class, departmentDTO); + dept.setDataCreateUserNo(AdminUserUtil.getUserNo()); + dept.setDataCreateUserName(AdminUserUtil.getUserName()); + dept.setDataCreateTime(LocalDateTime.now()); + dept.setDataModifyUserNo(AdminUserUtil.getUserNo()); + dept.setDataModifyUserName(AdminUserUtil.getUserName()); + dept.setDataModifyTime(LocalDateTime.now()); + departmentService.saveDepartment(dept); return ApiResult.success(true); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/BaseDepartmentVO.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/BaseDepartmentVO.java new file mode 100644 index 00000000..fe16bc2c --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/BaseDepartmentVO.java @@ -0,0 +1,15 @@ +package com.nflg.mobilebroken.admin.pojo.vo; + +import com.nflg.mobilebroken.repository.entity.TBaseDepartment; +import lombok.Data; + +import java.util.List; + +@Data +public class BaseDepartmentVO extends TBaseDepartment { + + /** + * 子级 + */ + private List children; +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminDepartmentService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminDepartmentService.java new file mode 100644 index 00000000..b0332ee6 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminDepartmentService.java @@ -0,0 +1,110 @@ +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.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.repository.entity.TBaseDepartment; +import com.nflg.mobilebroken.repository.service.ITBaseDepartmentService; +import org.springframework.stereotype.Service; + +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 AdminDepartmentService { + + @Resource + ITBaseDepartmentService departmentService; + public ApiResult> getList(DepartmentQuery query){ + Page result = departmentService.selectListByPage(query); + List dataResult = Convert.toList(BaseDepartmentVO.class, result.getRecords()); + if(StrUtil.isNotBlank(query.getDeptCodeOrName())){ + List alldept = Convert.toList(BaseDepartmentVO.class,departmentService.list()) ; + Map collect = alldept.stream().collect(Collectors.toMap(BaseDepartmentVO::getId, Function.identity())); + List allParents=new ArrayList<>(); + for (BaseDepartmentVO data:dataResult){ + allParents.addAll(getAllParents(data, collect)) ; + } + allParents.addAll(dataResult); + return ApiResult.success(buildTree(allParents),query,result.getTotal()); + } + else { + for (BaseDepartmentVO data:dataResult){ + initNodeChildren(data); + } + } + return ApiResult.success(dataResult,query,result.getTotal()); + + + + } + + + + + private void initNodeChildren(BaseDepartmentVO node) { + List immediateChildren = findChildDepartmentsByParentId(node.getId()); + node.setChildren(immediateChildren); + for (BaseDepartmentVO child : immediateChildren) { + initNodeChildren(child); + } + } + + private List findChildDepartmentsByParentId(int parentId) { + List depts = departmentService.lambdaQuery().eq(TBaseDepartment::getDeptParentId, parentId).list(); + return Convert.toList(BaseDepartmentVO.class,depts); + + } + + private List getAllParents(BaseDepartmentVO node, Map idToNodeMap) { + List parents = new ArrayList<>(); + Integer parentId = node.getDeptParentId(); + while (parentId != null && parentId>0) { + BaseDepartmentVO parentNode = idToNodeMap.get(parentId); + if (parentNode == null) break; // 防止数据不一致导致无限循环 + parents.add(parentNode); + parentId = parentNode.getDeptParentId(); // 移动到上一级 + } + Collections.reverse(parents); // 如果需要从根节点开始排序,则反转列表 + return parents; + } + + /** + * list 构建树 + * @param nodes + * @return + */ + private List buildTree(List nodes) { + // 使用Map存储id到Node的映射,便于快速查找父节点 + Map idToNodeMap = nodes.stream() + .collect(Collectors.toMap(BaseDepartmentVO::getId, Function.identity())); + + List roots = new ArrayList<>(); + + for (BaseDepartmentVO node : nodes) { + BaseDepartmentVO parent = idToNodeMap.get(node.getDeptParentId()); + 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-repository/src/main/resources/mapper/TBaseDepartmentMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TBaseDepartmentMapper.xml index 63ae556c..4da6913b 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TBaseDepartmentMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TBaseDepartmentMapper.xml @@ -12,7 +12,11 @@