增加部门

This commit is contained in:
戚辰先生 2024-12-01 15:02:12 +08:00
parent 6e79e0faac
commit 74cb4a3255
8 changed files with 120 additions and 4 deletions

View File

@ -5,6 +5,7 @@ import com.qqchen.deploy.backend.framework.api.Response;
import com.qqchen.deploy.backend.framework.controller.BaseController; import com.qqchen.deploy.backend.framework.controller.BaseController;
import com.qqchen.deploy.backend.model.DepartmentDTO; import com.qqchen.deploy.backend.model.DepartmentDTO;
import com.qqchen.deploy.backend.model.query.DepartmentQuery; import com.qqchen.deploy.backend.model.query.DepartmentQuery;
import com.qqchen.deploy.backend.model.response.DepartmentResponse;
import com.qqchen.deploy.backend.service.IDepartmentService; import com.qqchen.deploy.backend.service.IDepartmentService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -25,7 +26,7 @@ public class DepartmentApiController extends BaseController<Department, Departme
@Operation(summary = "获取部门树") @Operation(summary = "获取部门树")
@GetMapping("/tree") @GetMapping("/tree")
public Response<List<DepartmentDTO>> getTree() { public Response<List<DepartmentResponse>> getTree() {
return Response.success(departmentService.getTree()); return Response.success(departmentService.getTree());
} }

View File

@ -36,6 +36,12 @@ public class MenuApiController extends BaseController<Menu, MenuDTO, Long, MenuQ
return Response.success(menuService.getUserMenus()); return Response.success(menuService.getUserMenus());
} }
@Operation(summary = "获取菜单树")
@GetMapping("/tree")
public Response<List<MenuResponse>> getTree() {
return Response.success(menuService.getMenuTree());
}
@Override @Override
protected void exportData(HttpServletResponse response, List<MenuDTO> data) { protected void exportData(HttpServletResponse response, List<MenuDTO> data) {

View File

@ -3,10 +3,20 @@ package com.qqchen.deploy.backend.converter;
import com.qqchen.deploy.backend.entity.Department; import com.qqchen.deploy.backend.entity.Department;
import com.qqchen.deploy.backend.framework.converter.BaseConverter; import com.qqchen.deploy.backend.framework.converter.BaseConverter;
import com.qqchen.deploy.backend.model.DepartmentDTO; import com.qqchen.deploy.backend.model.DepartmentDTO;
import com.qqchen.deploy.backend.model.response.DepartmentResponse;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy; import org.mapstruct.ReportingPolicy;
import java.util.List;
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface DepartmentConverter extends BaseConverter<Department, DepartmentDTO> { public interface DepartmentConverter extends BaseConverter<Department, DepartmentDTO> {
// 继承了 BaseConverter 的方法不需要再声明 // 继承了 BaseConverter 的方法不需要再声明
@Mapping(target = "children", expression = "java(toResponseList(dto.getChildren()))")
DepartmentResponse toResponse(DepartmentDTO dto);
List<DepartmentResponse> toResponseList(List<DepartmentDTO> dtoList);
} }

View File

@ -0,0 +1,57 @@
package com.qqchen.deploy.backend.model.response;
import com.qqchen.deploy.backend.framework.dto.BaseResponse;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
public class DepartmentResponse extends BaseResponse {
/**
* 部门编码
*/
private String code;
/**
* 部门名称
*/
private String name;
/**
* 部门描述
*/
private String description;
/**
* 上级部门ID
*/
private Long parentId;
/**
* 显示排序
*/
private Integer sort;
/**
* 是否启用
*/
private Boolean enabled;
/**
* 负责人ID
*/
private Long leaderId;
/**
* 负责人姓名
*/
private String leaderName;
/**
* 子部门列表
*/
private List<DepartmentResponse> children;
}

View File

@ -3,6 +3,7 @@ package com.qqchen.deploy.backend.service;
import com.qqchen.deploy.backend.entity.Department; import com.qqchen.deploy.backend.entity.Department;
import com.qqchen.deploy.backend.framework.service.IBaseService; import com.qqchen.deploy.backend.framework.service.IBaseService;
import com.qqchen.deploy.backend.model.DepartmentDTO; import com.qqchen.deploy.backend.model.DepartmentDTO;
import com.qqchen.deploy.backend.model.response.DepartmentResponse;
import java.util.List; import java.util.List;
@ -11,5 +12,5 @@ public interface IDepartmentService extends IBaseService<Department, DepartmentD
/** /**
* 获取部门树 * 获取部门树
*/ */
List<DepartmentDTO> getTree(); List<DepartmentResponse> getTree();
} }

View File

@ -20,4 +20,9 @@ public interface IMenuService extends IBaseService<Menu, MenuDTO, Long> {
* @return 用户菜单 * @return 用户菜单
*/ */
List<MenuResponse> getUserMenus(); List<MenuResponse> getUserMenus();
/**
* 获取菜单树
*/
List<MenuDTO> getTree();
} }

View File

@ -6,6 +6,7 @@ import com.qqchen.deploy.backend.framework.enums.ResponseCode;
import com.qqchen.deploy.backend.framework.exception.UniqueConstraintException; import com.qqchen.deploy.backend.framework.exception.UniqueConstraintException;
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl; import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
import com.qqchen.deploy.backend.model.DepartmentDTO; import com.qqchen.deploy.backend.model.DepartmentDTO;
import com.qqchen.deploy.backend.model.response.DepartmentResponse;
import com.qqchen.deploy.backend.repository.IDepartmentRepository; import com.qqchen.deploy.backend.repository.IDepartmentRepository;
import com.qqchen.deploy.backend.service.IDepartmentService; import com.qqchen.deploy.backend.service.IDepartmentService;
import com.qqchen.deploy.backend.framework.annotation.ServiceType; import com.qqchen.deploy.backend.framework.annotation.ServiceType;
@ -42,9 +43,10 @@ public class DepartmentServiceImpl extends BaseServiceImpl<Department, Departmen
} }
@Override @Override
public List<DepartmentDTO> getTree() { public List<DepartmentResponse> getTree() {
List<Department> departments = departmentRepository.findByDeletedFalseOrderBySort(); List<Department> departments = departmentRepository.findByDeletedFalseOrderBySort();
return buildTree(departments); List<DepartmentDTO> dtoTree = buildTree(departments);
return departmentConverter.toResponseList(dtoTree);
} }
private List<DepartmentDTO> buildTree(List<Department> departments) { private List<DepartmentDTO> buildTree(List<Department> departments) {

View File

@ -19,6 +19,7 @@ import java.util.Map;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap;
import static com.qqchen.deploy.backend.framework.annotation.ServiceType.Type.DATABASE; import static com.qqchen.deploy.backend.framework.annotation.ServiceType.Type.DATABASE;
@ -66,6 +67,39 @@ public class MenuServiceImpl extends BaseServiceImpl<Menu, MenuDTO, Long> implem
return menuConverter.toResponseList(menuTree); return menuConverter.toResponseList(menuTree);
} }
@Override
public List<MenuDTO> getTree() {
List<Menu> menus = menuRepository.findByDeletedFalseOrderBySort();
return buildTree(menus);
}
private List<MenuDTO> buildTree(List<Menu> menus) {
Map<Long, MenuDTO> dtoMap = new HashMap<>();
List<MenuDTO> roots = new ArrayList<>();
// 转换为DTO并建立映射
menus.forEach(menu -> {
MenuDTO dto = menuConverter.toDto(menu);
dto.setChildren(new ArrayList<>());
dtoMap.put(dto.getId(), dto);
});
// 构建树形结构
menus.forEach(menu -> {
MenuDTO dto = dtoMap.get(menu.getId());
if (menu.getParentId() == null || menu.getParentId() == 0) {
roots.add(dto);
} else {
MenuDTO parent = dtoMap.get(menu.getParentId());
if (parent != null) {
parent.getChildren().add(dto);
}
}
});
return roots;
}
private List<MenuDTO> buildMenuTree(List<MenuDTO> menus) { private List<MenuDTO> buildMenuTree(List<MenuDTO> menus) {
// 使用Map存储所有菜单便于查找 // 使用Map存储所有菜单便于查找
Map<Long, MenuDTO> menuMap = menus.stream() Map<Long, MenuDTO> menuMap = menus.stream()