From 9a7a4f5b266e873aaa52ac36c1471ea7ccb9b9d7 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 9 Sep 2024 14:39:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(Bug=E4=BF=AE=E5=A4=8D):=20=E5=9C=A8?= =?UTF-8?q?=E5=90=8E=E5=8F=B0=E7=AE=A1=E7=90=86=E7=BB=99=E4=B8=93=E5=8C=BA?= =?UTF-8?q?=E5=88=86=E9=85=8D=E8=A7=92=E8=89=B2=EF=BC=8C=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原因:由于编辑组织可选角色时虚拟角色默认不可见,导致前端提交可选角色时不会携带虚拟角色,但此组织可能存在虚拟角色用户,导致删除改虚拟角色失败 解决方案:虚拟角色不删除 --- .../system/domain/SysDeptRole.java | 40 ++++++--------- .../system/service/ISysDeptRoleService.java | 2 +- .../service/impl/SysDeptRoleServiceImpl.java | 18 ++++--- .../mapper/system/SysDeptRoleMapper.xml | 51 ++++++++++++++++--- 4 files changed, 70 insertions(+), 41 deletions(-) diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/domain/SysDeptRole.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/domain/SysDeptRole.java index 08d31cebf..ed6d4530b 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/domain/SysDeptRole.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/domain/SysDeptRole.java @@ -1,8 +1,10 @@ package com.microservices.system.domain; import com.microservices.common.core.web.domain.BaseEntity; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; +import com.microservices.system.api.domain.SysDept; +import com.microservices.system.api.domain.SysRole; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; /** * 部门下可选角色对象 sys_dept_role @@ -10,6 +12,7 @@ import org.apache.commons.lang3.builder.ToStringStyle; * @author otto * @date 2023-04-12 */ +@Data public class SysDeptRole extends BaseEntity { public SysDeptRole(Long deptId, Long roleId) { this.deptId = deptId; @@ -27,28 +30,15 @@ public class SysDeptRole extends BaseEntity { * 角色ID */ private Long roleId; + /** + * 部门对象 + */ + @ApiModelProperty(value = "部门对象", hidden = true) + private SysDept sysDept; - public void setDeptId(Long deptId) { - this.deptId = deptId; - } - - public Long getDeptId() { - return deptId; - } - - public void setRoleId(Long roleId) { - this.roleId = roleId; - } - - public Long getRoleId() { - return roleId; - } - - @Override - public String toString() { - return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) - .append("deptId", getDeptId()) - .append("roleId", getRoleId()) - .toString(); - } + /** + * 角色对象 + */ + @ApiModelProperty(value = "角色对象", hidden = true) + private SysRole sysRole; } diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysDeptRoleService.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysDeptRoleService.java index 8d367b8a7..eac12b428 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysDeptRoleService.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/ISysDeptRoleService.java @@ -30,7 +30,7 @@ public interface ISysDeptRoleService { * @param roleIds 角色主键列表 * @return 结果 */ - int addSysRoleListForSysDept(Long deptId, Long[] roleIds); + boolean addSysRoleListForSysDept(Long deptId, Long[] roleIds); /** * 批量删除部门下可选角色 diff --git a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysDeptRoleServiceImpl.java b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysDeptRoleServiceImpl.java index 642426473..c41a99dfd 100644 --- a/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysDeptRoleServiceImpl.java +++ b/microservices-modules/microservices-modules-system/src/main/java/com/microservices/system/service/impl/SysDeptRoleServiceImpl.java @@ -186,8 +186,7 @@ public class SysDeptRoleServiceImpl implements ISysDeptRoleService { @Override @Transactional(rollbackFor = Exception.class) - public int addSysRoleListForSysDept(Long deptId, Long[] roleIds) { - int success = 0; + public boolean addSysRoleListForSysDept(Long deptId, Long[] roleIds) { selectSysDeptById(deptId); List newRoleIdList = Arrays.asList(roleIds); List oldDeptRoleList = sysDeptRoleMapper.selectSysDeptRoleListByDeptId(deptId, null); @@ -197,6 +196,13 @@ public class SysDeptRoleServiceImpl implements ISysDeptRoleService { if (oldDeptRoleList != null && !oldDeptRoleList.isEmpty()) { List oldRoleIdList = oldDeptRoleList .stream() + .filter(x -> { + SysRole sysRole = x.getSysRole(); + if (sysRole != null) { + return !SystemRole.isVirtual(sysRole.getRoleKey()); + } + return false; + }) .map(SysDeptRole::getRoleId) .collect(Collectors.toList()); @@ -206,7 +212,7 @@ public class SysDeptRoleServiceImpl implements ISysDeptRoleService { List delRoleIdList = new ArrayList<>(oldRoleIdList); delRoleIdList.removeAll(newRoleIdList); if (!delRoleIdList.isEmpty()) { - success += deleteSysRoleListForSysDept(deptId, delRoleIdList.toArray(new Long[0])); + deleteSysRoleListForSysDept(deptId, delRoleIdList.toArray(new Long[0])); } } @@ -216,12 +222,10 @@ public class SysDeptRoleServiceImpl implements ISysDeptRoleService { .selectSysDeptRoleByDeptIdAndRoleId(deptId, roleId); if (sysDeptRole == null) { sysDeptRole = new SysDeptRole(deptId, roleId); - success += sysDeptRoleMapper.insertSysDeptRole(sysDeptRole); - } else { - success++; + sysDeptRoleMapper.insertSysDeptRole(sysDeptRole); } } - return success; + return true; } @Override diff --git a/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysDeptRoleMapper.xml b/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysDeptRoleMapper.xml index cdfd04d5c..44422352e 100644 --- a/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysDeptRoleMapper.xml +++ b/microservices-modules/microservices-modules-system/src/main/resources/mapper/system/SysDeptRoleMapper.xml @@ -7,6 +7,29 @@ + + + + + + + + + + + + + + + + + + + + + @@ -14,12 +37,24 @@ from sys_dept_role - - SELECT sdr.dept_id, - sdr.role_id, - sr.role_name - FROM sys_dept_role sdr - LEFT JOIN sys_role sr ON sr.role_id = sdr.role_id + + select sd.dept_id, + sd.parent_id, + sd.ancestors, + sd.dept_name, + sd.order_num, + sd.dept_type, + sd.leader, + sd.status as dept_status, + sr.role_id, + sr.role_name, + sr.role_key, + sr.role_sort, + sr.data_scope, + sr.status as role_status + from sys_dept_role sdr + left join sys_dept sd on sdr.dept_id = sd.dept_id + left join sys_role sr on sr.role_id = sdr.role_id - + where sdr.dept_id = #{deptId} @@ -58,7 +93,7 @@ WHERE role_id = #{roleId}