|
|
@ -11,6 +11,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
import cn.hutool.crypto.digest.DigestUtil; |
|
|
import cn.hutool.crypto.digest.DigestUtil; |
|
|
|
|
|
import cn.hutool.core.lang.tree.Tree; |
|
|
|
|
|
import cn.hutool.core.lang.tree.TreeUtil; |
|
|
|
|
|
import cn.hutool.core.lang.tree.TreeNodeConfig; |
|
|
import lombok.RequiredArgsConstructor; |
|
|
import lombok.RequiredArgsConstructor; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
@ -18,6 +21,7 @@ import com.zdxt.enforcementcode.domain.bo.EfcodeVirtualUnitBo; |
|
|
import com.zdxt.enforcementcode.domain.bo.UnitUserBo; |
|
|
import com.zdxt.enforcementcode.domain.bo.UnitUserBo; |
|
|
import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitVo; |
|
|
import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitVo; |
|
|
import com.zdxt.enforcementcode.domain.vo.UnitUserVo; |
|
|
import com.zdxt.enforcementcode.domain.vo.UnitUserVo; |
|
|
|
|
|
import com.zdxt.enforcementcode.domain.vo.VirtualUnitDeptTreeVo; |
|
|
import com.zdxt.enforcementcode.domain.EfcodeVirtualUnit; |
|
|
import com.zdxt.enforcementcode.domain.EfcodeVirtualUnit; |
|
|
import com.zdxt.enforcementcode.mapper.EfcodeVirtualUnitMapper; |
|
|
import com.zdxt.enforcementcode.mapper.EfcodeVirtualUnitMapper; |
|
|
import com.zdxt.enforcementcode.service.IEfcodeVirtualUnitService; |
|
|
import com.zdxt.enforcementcode.service.IEfcodeVirtualUnitService; |
|
|
@ -25,6 +29,7 @@ import org.dromara.system.domain.SysDept; |
|
|
import org.dromara.system.domain.SysUser; |
|
|
import org.dromara.system.domain.SysUser; |
|
|
import org.dromara.system.mapper.SysDeptMapper; |
|
|
import org.dromara.system.mapper.SysDeptMapper; |
|
|
import org.dromara.system.mapper.SysUserMapper; |
|
|
import org.dromara.system.mapper.SysUserMapper; |
|
|
|
|
|
import org.dromara.system.service.ISysDeptService; |
|
|
import com.zdxt.enforcementcode.domain.vo.SrzDeptVo; |
|
|
import com.zdxt.enforcementcode.domain.vo.SrzDeptVo; |
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
|
|
|
|
|
@ -46,6 +51,7 @@ public class EfcodeVirtualUnitServiceImpl implements IEfcodeVirtualUnitService { |
|
|
private final SysDeptMapper sysDeptMapper; |
|
|
private final SysDeptMapper sysDeptMapper; |
|
|
private final SrzDeptMapper srzDeptMapper; |
|
|
private final SrzDeptMapper srzDeptMapper; |
|
|
private final SysUserMapper sysUserMapper; |
|
|
private final SysUserMapper sysUserMapper; |
|
|
|
|
|
private final ISysDeptService sysDeptService; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 查询虚拟单位树 |
|
|
* 查询虚拟单位树 |
|
|
@ -376,4 +382,57 @@ public class EfcodeVirtualUnitServiceImpl implements IEfcodeVirtualUnitService { |
|
|
} |
|
|
} |
|
|
sysUserMapper.deleteByIds(List.of(userIds)); |
|
|
sysUserMapper.deleteByIds(List.of(userIds)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 构建角色数据权限使用的虚拟单位部门树 |
|
|
|
|
|
* <p> |
|
|
|
|
|
* 树节点ID使用 vir_id 展示层级,节点携带 sysDeptId; |
|
|
|
|
|
* checkedKeys 为角色已保存的 sys_dept_id 反查得到的 vir_id 列表。 |
|
|
|
|
|
*/ |
|
|
|
|
|
@Override |
|
|
|
|
|
public VirtualUnitDeptTreeVo buildRoleDeptTree(Long roleId) { |
|
|
|
|
|
List<EfcodeVirtualUnitVo> allUnits = queryTreeList(); |
|
|
|
|
|
|
|
|
|
|
|
// 收集全部 virId,并构建 sysDeptId -> virId 映射(用于反查勾选项)
|
|
|
|
|
|
Set<String> allVirIds = new HashSet<>(); |
|
|
|
|
|
Map<String, String> sysDeptIdToVirId = new HashMap<>(); |
|
|
|
|
|
for (EfcodeVirtualUnitVo u : allUnits) { |
|
|
|
|
|
allVirIds.add(u.getVirId()); |
|
|
|
|
|
if (StringUtils.isNotBlank(u.getSysDeptId())) { |
|
|
|
|
|
sysDeptIdToVirId.putIfAbsent(u.getSysDeptId(), u.getVirId()); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 计算根 parentId 集合:parentId 为空或不在所有 virId 中的节点视为根
|
|
|
|
|
|
Set<String> rootParentIds = new LinkedHashSet<>(); |
|
|
|
|
|
for (EfcodeVirtualUnitVo u : allUnits) { |
|
|
|
|
|
String pid = u.getVirParentId(); |
|
|
|
|
|
if (StringUtils.isBlank(pid) || !allVirIds.contains(pid)) { |
|
|
|
|
|
rootParentIds.add(StringUtils.isBlank(pid) ? "0" : pid); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 构建树:节点id=virId,label=virName,携带 sysDeptId
|
|
|
|
|
|
TreeNodeConfig config = new TreeNodeConfig().setNameKey("label"); |
|
|
|
|
|
List<Tree<String>> depts = new ArrayList<>(); |
|
|
|
|
|
for (String rootPid : rootParentIds) { |
|
|
|
|
|
depts.addAll(TreeUtil.build(allUnits, rootPid, config, (u, tree) -> { |
|
|
|
|
|
tree.setId(u.getVirId()); |
|
|
|
|
|
tree.setParentId(StringUtils.isBlank(u.getVirParentId()) ? "0" : u.getVirParentId()); |
|
|
|
|
|
tree.setName(u.getVirName()); |
|
|
|
|
|
tree.setWeight(u.getCustOrderNum() != null ? u.getCustOrderNum() : u.getOrderNum()); |
|
|
|
|
|
tree.putExtra("sysDeptId", u.getSysDeptId()); |
|
|
|
|
|
})); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// checkedKeys:角色已保存的 sys_dept_id 反查为 vir_id
|
|
|
|
|
|
List<String> deptSysIds = sysDeptService.selectDeptListByRoleId(roleId); |
|
|
|
|
|
List<String> checkedKeys = deptSysIds.stream() |
|
|
|
|
|
.map(sysDeptIdToVirId::get) |
|
|
|
|
|
.filter(Objects::nonNull) |
|
|
|
|
|
.distinct() |
|
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
|
|
return new VirtualUnitDeptTreeVo(checkedKeys, depts); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|