首页 > 其他分享 >二维数组在代码中的应用

二维数组在代码中的应用

时间:2023-04-28 15:46:19浏览次数:31  
标签:String 岗位 ID 二维 数组 id 代码

在做人岗架时,最初在需求拟定时,客户信誓旦旦的说一个用户只会属于一个部门的一个岗位,所以设计数据库如下:

同时也有用户角色关系表

角色表

以及用户码表。

仅仅隔了半年突然就出现了特殊情况,有多个部门多个岗位为一个用户的情况,主职和兼职的情况。用户唯一标识是手机号,用户也只有一个手机。

这样为了避免大改的情况就采用了二维数组(前面是部门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和部门idlist集合
    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

相关文章

  • 淘宝店铺商品详情接口代码-获取淘宝商品详情 API 接口返回值说明示例
    ​现在某宝的规则越来越严,想要入驻某宝需要审核的特别严格,不然就会被封店,那么大家知道某宝店铺商品详情接口吗?下面是我整理的关于某宝店铺商品详情接口的相关内容,大家可以来了解下! 目前提供的接口有:商品详情、商品详情原数据、商品评论、商品快递费用、淘宝分类详情、关键字搜......
  • 数字在排序数组中出现的次数
    classSolution{public://二分找出k第一次,最后一个k后面的下标,相减就是答案intgetNumberOfK(vector<int>&nums,intk){intn=nums.size();if(!n)return0;//找到第一个≥k的下标intl=0,r=n-1;while(l<r){......
  • JavaFx 生成二维码工具类封装
    原文地址:JavaFx生成二维码工具类封装-Stars-One的杂货小窝之前星之音乐下载器有需要生成二维码功能,当时用的是一个开源库来实现的,但是没过多久,发现那个库依赖太多,有个http-client的依赖,把软件都搞大了一倍,而且有时候开发的时候下载依赖还报错,就想换个方案于是在网上......
  • 二分查找算法讲解及其C++代码实现
    二分查找算法是一种常用的查找算法,也被称为折半查找。它可以在有序的数组或列表中快速查找需要的元素。算法描述:首先确定数组的中间位置mid=(left+right)/2;然后将要查找的值key与中间位置的值进行比较;如果key等于中间位置的值,则查找成功,返回mid;如果key小于中间位置的值,则在......
  • 1.代码发送钉钉警报
    1.yml配置:alert:dingdingToken:b77968b5ac150902f2a23858ecd1ba3e822521b3f21a47f047b07ef2ea9c5a86//机器人生成的群codeservices:groupMessage://执行的方法别名owners:-13616546418......
  • 写代码犹如写文章: “大师级程序员把系统当故事来讲,而不是当做程序来写” | 如何架构
    “大师级程序员把系统当故事来讲,而不是当做程序来写”写代码犹如写文章好的代码应该如好文章一样表达思想,被人读懂。中心思想:突出明确程序是开发者用编程语言写成的一本书,首先应该是记录开发者对业务需求分析、系统分析,最终用软件实现所思所想的知识的记录与传承。然后再是完成程......
  • Python很多时候要从键盘连续输入一个数组,并用空格隔开;Python爬取一些数据;python pip安
    Python要从键盘连续输入一个数组,并用空格隔开,Python中的实现方法如下:str=input(‘以空格为间隔连续输入一个数组:’)然后在键盘中输入,会·得到的str为一个字符串,要将其转为一个列表有两种方法方法一:a=[int(n)forninstr_in.split()]方法二:a=list(map(int,str.strip().sp......
  • 二维下,行政区划借助 geoserver样式配置,实现伪3d效果
    最终效果图如下:首先要知道拉伸的对象是建筑或者其他附着设施,即面图层,点和线要素不存在高度的拉伸。配置中关注一下内容:  主要是isometric和offset两个ogc:function的名称  isometric方法名中<Geometry><ogc:Functionname="isometric"><ogc:Propert......
  • redisson-2.10.4源代码分析
       redis学习问题总结http://aperise.iteye.com/blog/2310639ehcachememcachedredis缓存技术总结http://aperise.iteye.com/blog/2296219redis-stat离线安装http://aperise.iteye.com/blog/2310254redis cluster非ruby方式启动http://aperise.iteye.com/blog/2310254re......
  • 如何实现Spring中服务关闭时对象销毁执行代码
    spring提供了两种方式用于实现对象销毁时去执行操作1.实现DisposableBean接口的destroy2.在bean类的方法上增加@PreDestroy方法,那么这个方法会在DisposableBean.destory方法前触发3.实现SmartLifecycle接口的stop方法packagecom.wyf.service;importorg.springframework.be......