在做人岗架时,最初在需求拟定时,客户信誓旦旦的说一个用户只会属于一个部门的一个岗位,所以设计数据库如下:
同时也有用户角色关系表
角色表
以及用户码表。
仅仅隔了半年突然就出现了特殊情况,有多个部门多个岗位为一个用户的情况,主职和兼职的情况。用户唯一标识是手机号,用户也只有一个手机。
这样为了避免大改的情况就采用了二维数组(前面是部门ID,后面是岗位ID)的方式来处理多部门多岗位的情况。
处理这块代码如下:
String[][] roleIdsArray = userManageDTO.getRoleIds();
//二维数组转换
String[][] finalRoleIdsArray = arrayTransform(roleIdsArray,userManageDTO.getOrganizationId());
private String[][] arrayTransform(String[][] roleIdsArray, long companyOrProjectId) {
// 创建部门ID和岗位ID的映射表
Map<Long, Long> deptIdMap = new HashMap<>();
Map<Long, Long> postIdMap = new HashMap<>();
// 遍历虚拟部门ID和虚拟岗位ID的二维数组
for (String[] roleIds : roleIdsArray) {
// 调用 virtualTrans 方法,将虚拟部门ID和虚拟岗位ID转化为实体部门ID和实体岗位ID
long deptId = 0L; // 初始化为0
deptId = virtualDeptTrans(Long.parseLong(roleIds[0]), companyOrProjectId);
if(deptId==0L){
continue;
}
long postId = virtualPostTrans(Long.parseLong(roleIds[1]), companyOrProjectId, deptId);
// 将实体部门ID和实体岗位ID添加到映射表中
deptIdMap.put(deptId, postId);
postIdMap.put(postId, deptId);
}
// 将映射表转化为实体部门ID和实体岗位ID的二维数组
String[][] entityRoleIdsArray = new String[postIdMap.size()][2];
int i = 0;
for (Map.Entry<Long, Long> entry : postIdMap.entrySet()) {
entityRoleIdsArray[i][0] = entry.getValue().toString();
entityRoleIdsArray[i][1] = entry.getKey().toString();
i++;
}
return entityRoleIdsArray;
}
其它代码:
if(roleIds!=""&&roleIds!=null){
//将二维数组转化为JSONArray对象
JSONArray jsonArray = new JSONArray(roleIds);
//定义新岗位id和部门id的list集合
List<Long> postIdList = new ArrayList<>();
List<Long> deptIdList = new ArrayList<>();
//遍历JSONArray获取每个岗位id和部门id
for (int i = 0; i < jsonArray.length(); i++) {
JSONArray array = jsonArray.getJSONArray(i);
for (int j = 0; j < array.length(); j++) {
Long id = array.getLong(j);
if (j == 0) {
deptIdList.add(id);
} else if (j == 1) {
postIdList.add(id);
}
}
}
roleNames = dbRoleMapper.selectRolesByRoleIdList(postIdList)
.stream().map(RoleDO::getRoleName).collect(Collectors.toList())
.stream().collect(Collectors.joining(","));
deptNames = dbDepartmentMapper.selectDepartDTOByIds(deptIdList)
.stream().map(DbDepartmentDTO::getDeptName).collect(Collectors.toList())
.stream().collect(Collectors.joining(","));
//二维数组返给前端,略
}
这样就通过二维数组的方式解决了多部门多岗位的问题,而不需要改表结构。
标签:String,岗位,ID,二维,数组,id,代码 From: https://www.cnblogs.com/CarlJohnson9527/p/17362347.html