部门模块的迁移

This commit is contained in:
YunaiV
2020-07-14 19:31:27 +08:00
parent 244f248ad5
commit 846510c309
47 changed files with 1203 additions and 333 deletions

View File

@@ -1,5 +1,6 @@
package cn.iocoder.mall.managementweb.manager.admin;
import cn.iocoder.common.framework.util.CollectionUtils;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.managementweb.controller.admin.dto.AdminCreateDTO;
@@ -10,39 +11,87 @@ import cn.iocoder.mall.managementweb.controller.admin.vo.AdminPageItemVO;
import cn.iocoder.mall.managementweb.controller.admin.vo.AdminVO;
import cn.iocoder.mall.managementweb.convert.admin.AdminConvert;
import cn.iocoder.mall.systemservice.rpc.admin.AdminRpc;
import cn.iocoder.mall.systemservice.rpc.admin.DepartmentRpc;
import cn.iocoder.mall.systemservice.rpc.admin.vo.DepartmentVO;
import cn.iocoder.mall.systemservice.rpc.permission.PermissionRpc;
import cn.iocoder.mall.systemservice.rpc.permission.RoleRpc;
import cn.iocoder.mall.systemservice.rpc.permission.vo.RoleVO;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
public class AdminManager {
@Reference(version = "${dubbo.consumer.AdminRpc.version}", validation = "false")
private AdminRpc adminRpc;
@Reference(version = "${dubbo.consumer.RoleRpc.version}", validation = "false")
private RoleRpc roleRpc;
@Reference(version = "${dubbo.consumer.DepartmentRpc.version}", validation = "false")
private DepartmentRpc departmentRpc;
@Reference(version = "${dubbo.consumer.PermissionRpc.version}", validation = "false")
private PermissionRpc permissionRpc;
public PageResult<AdminPageItemVO> pageAdmin(AdminPageDTO pageDTO) {
CommonResult<PageResult<cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO>> pageResult =
adminRpc.pageAdmin(AdminConvert.INSTANCE.convert(pageDTO));
pageResult.checkError();
// 转换结果
PageResult<AdminPageItemVO> adminPageVO = AdminConvert.INSTANCE.convert(pageResult.getData());
PageResult<AdminPageItemVO> adminPageVO = new PageResult<>();
adminPageVO.setTotal(pageResult.getData().getTotal());
adminPageVO.setList(new ArrayList<>(pageResult.getData().getList().size()));
// 拼接结果
// if (!resultPage.getList().isEmpty()) {
// // 查询角色数组
// Map<Integer, Collection<RoleBO>> roleMap = adminService.getAdminRolesMap(CollectionUtil.convertList(resultPage.getList(), AdminBO::getId));
// resultPage.getList().forEach(admin -> admin.setRoles(AdminConvert.INSTANCE.convertAdminVORoleList(roleMap.get(admin.getId()))));
//
// // 查询对应部门
// List<DeptmentBO> deptmentBOS = deptmentService.getAllDeptments();
// Map<Integer, String> deptNameMap = deptmentBOS.stream().collect(Collectors.toMap(d->d.getId(), d->d.getName()));
// //管理员所在部门被删后,变成未分配状态
// deptNameMap.put(0, "未分配");
// resultPage.getList().forEach(admin->{
// admin.setDeptment(new AdminVO.Deptment(admin.getDeptmentId(), deptNameMap.get(admin.getDeptmentId())));
// });
// }
if (!pageResult.getData().getList().isEmpty()) {
// 查询角色数组
Map<Integer, List<RoleVO>> adminRoleMap = this.listAdminRoles(CollectionUtils.convertList(pageResult.getData().getList(),
cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO::getId));
// 查询部门
CommonResult<List<DepartmentVO>> listDepartmentsResult = departmentRpc.listDepartments(
CollectionUtils.convertSet(pageResult.getData().getList(),
cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO::getDepartmentId));
listDepartmentsResult.checkError();
Map<Integer, DepartmentVO> departmentMap = CollectionUtils.convertMap(listDepartmentsResult.getData(), DepartmentVO::getId);
// 拼接数据
for (cn.iocoder.mall.systemservice.rpc.admin.vo.AdminVO adminVO : pageResult.getData().getList()) {
AdminPageItemVO adminPageItemVO = AdminConvert.INSTANCE.convert02(adminVO);
adminPageVO.getList().add(adminPageItemVO);
// 拼接部门
adminPageItemVO.setDepartment(AdminConvert.INSTANCE.convert(departmentMap.get(adminVO.getDepartmentId())));
// 拼接角色
adminPageItemVO.setRoles( AdminConvert.INSTANCE.convert(adminRoleMap.get(adminVO.getId())));
}
} else {
adminPageVO.setList(Collections.emptyList());
}
return adminPageVO;
}
private Map<Integer, List<RoleVO>> listAdminRoles(List<Integer> adminIds) {
// 获得管理员拥有的角色
CommonResult<Map<Integer, Set<Integer>>> mapAdminRoleIdsResult = permissionRpc.mapAdminRoleIds(adminIds);
mapAdminRoleIdsResult.checkError();
// 获得角色列表
Set<Integer> roleIds = new HashSet<>();
mapAdminRoleIdsResult.getData().values().forEach(roleIds::addAll);
CommonResult<List<RoleVO>> listRolesResult = roleRpc.listRoles(roleIds);
listRolesResult.checkError();
Map<Integer, RoleVO> roleVOMap = CollectionUtils.convertMap(listRolesResult.getData(), RoleVO::getId);
// 拼接结果
Map<Integer, List<RoleVO>> adminRoleVOMap = new HashMap<>();
mapAdminRoleIdsResult.getData().forEach((adminId, adminRoleIds) -> {
List<RoleVO> roleVOs = new ArrayList<>(adminRoleIds.size());
adminRoleIds.forEach(roleId -> {
RoleVO roleVO = roleVOMap.get(roleId);
if (roleVO != null) {
roleVOs.add(roleVO);
}
});
adminRoleVOMap.put(adminId, roleVOs);
});
return adminRoleVOMap;
}
public Integer createAdmin(AdminCreateDTO createDTO, Integer createAdminId, String createIp) {
CommonResult<Integer> createAdminResult = adminRpc.createAdmin(AdminConvert.INSTANCE.convert(createDTO)
.setCreateAdminId(createAdminId).setCreateIp(createIp));

View File

@@ -0,0 +1,128 @@
package cn.iocoder.mall.managementweb.manager.admin;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.managementweb.controller.admin.dto.DepartmentCreateDTO;
import cn.iocoder.mall.managementweb.controller.admin.dto.DepartmentUpdateDTO;
import cn.iocoder.mall.managementweb.controller.admin.vo.DepartmentTreeNodeVO;
import cn.iocoder.mall.managementweb.controller.admin.vo.DepartmentVO;
import cn.iocoder.mall.managementweb.convert.admin.DepartmentConvert;
import cn.iocoder.mall.systemservice.enums.admin.DepartmentIdEnum;
import cn.iocoder.mall.systemservice.rpc.admin.DepartmentRpc;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* 部门 Manager
*/
@Service
@Slf4j
public class DepartmentManager {
@Reference(version = "${dubbo.consumer.DepartmentRpc.version}", validation = "false")
private DepartmentRpc departmentRpc;
/**
* 创建部门
*
* @param createDTO 创建部门 DTO
* @return 部门
*/
public Integer createDepartment(DepartmentCreateDTO createDTO) {
CommonResult<Integer> createDepartmentResult = departmentRpc.createDepartment(DepartmentConvert.INSTANCE.convert(createDTO));
createDepartmentResult.checkError();
return createDepartmentResult.getData();
}
/**
* 更新部门
*
* @param updateDTO 更新部门 DTO
*/
public void updateDepartment(DepartmentUpdateDTO updateDTO) {
CommonResult<Boolean> updateDepartmentResult = departmentRpc.updateDepartment(DepartmentConvert.INSTANCE.convert(updateDTO));
updateDepartmentResult.checkError();
}
/**
* 删除部门
*
* @param departmentId 部门编号
*/
public void deleteDepartment(Integer departmentId) {
CommonResult<Boolean> deleteDepartmentResult = departmentRpc.deleteDepartment(departmentId);
deleteDepartmentResult.checkError();
}
/**
* 获得部门
*
* @param departmentId 部门编号
* @return 部门
*/
public DepartmentVO getDepartment(Integer departmentId) {
CommonResult<cn.iocoder.mall.systemservice.rpc.admin.vo.DepartmentVO> getDepartmentResult = departmentRpc.getDepartment(departmentId);
getDepartmentResult.checkError();
return DepartmentConvert.INSTANCE.convert(getDepartmentResult.getData());
}
/**
* 获得部门列表
*
* @param departmentIds 部门编号列表
* @return 部门列表
*/
public List<DepartmentVO> listDepartments(List<Integer> departmentIds) {
CommonResult<List<cn.iocoder.mall.systemservice.rpc.admin.vo.DepartmentVO>> listDepartmentResult = departmentRpc.listDepartments(departmentIds);
listDepartmentResult.checkError();
return DepartmentConvert.INSTANCE.convertList(listDepartmentResult.getData());
}
/**
* 获得部门树结构
*
* @return 部门树结构
*/
public List<DepartmentTreeNodeVO> treeDepartment() {
// 获得资源全列表
CommonResult<List<cn.iocoder.mall.systemservice.rpc.admin.vo.DepartmentVO>> listDepartmentResult = departmentRpc.listDepartments();
listDepartmentResult.checkError();
// 构建菜单树
return buildDepartmentTree(listDepartmentResult.getData());
}
/**
* 构建部门树
*
* @param departmentVOs 部门列表
* @return 部门树
*/
public static List<DepartmentTreeNodeVO> buildDepartmentTree(List<cn.iocoder.mall.systemservice.rpc.admin.vo.DepartmentVO> departmentVOs) {
// 排序,保证菜单的有序性
departmentVOs.sort(Comparator.comparing(cn.iocoder.mall.systemservice.rpc.admin.vo.DepartmentVO::getSort));
// 构建菜单树
// 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。
Map<Integer, DepartmentTreeNodeVO> treeNodeMap = new LinkedHashMap<>();
departmentVOs.forEach(departmentVO -> treeNodeMap.put(departmentVO.getId(), DepartmentConvert.INSTANCE.convertTreeNode(departmentVO)));
// 处理父子关系
treeNodeMap.values().stream().filter(node -> !node.getPid().equals(DepartmentIdEnum.ROOT.getId())).forEach((childNode) -> {
// 获得父节点
DepartmentTreeNodeVO parentNode = treeNodeMap.get(childNode.getPid());
if (parentNode == null) {
log.error("[buildDepartmentTree][department({}) 找不到父部门({})]", childNode.getId(), childNode.getPid());
return;
}
// 将自己添加到父节点中
if (parentNode.getChildren() == null) {
parentNode.setChildren(new ArrayList<>());
}
parentNode.getChildren().add(childNode);
});
// 获得到所有的根节点
return treeNodeMap.values().stream().filter(node -> node.getPid().equals(DepartmentIdEnum.ROOT.getId())).collect(Collectors.toList());
}
}