根据ID集合查询符合某种类型的用户信息,并按其他类型分类

简介: 根据ID集合查询符合某种类型的用户信息,并按其他类型分类

上次在未完成的博客中,描述的业务需求不准确,今天将业务重新描述一下。

一、页面显示的效果:


20171125190603336.png

配合前端页面,根据部门id集合查询该部门下管理员类型是物资管理员的所有用户的userId,userName,并按部门和业务管理员类型分类;

(物资管理员下还会分三种业务管理员,负责不同的业务)


二、分析需求:


1、返回类型 : List<Vo>


  (Vo 是在项目中更加自己的业务需求新建的实体,有的项目中叫module)


2、管理员类型:managerType = asset


3、难点:只返回userId,userName,并按部门,和业务管理员类型分类;(考虑到后端需要向前端传递的数据量的大小,尽量不返回多余的字段)


对于返回类型较复杂的,我会在json在线工具中,先把要返回的类型模拟一下,然后再建vo,编程

[
    {
        "deptName": "部门一",
        "deptId": "1",
        "managerType": "asset",
        "assetManager": [
            {
                "userId": "1",
                "userName": "1"
            },
            {
                "userId": "2",
                "userName": "2"
            }
        ],
        "inAssetManager": [
            {
                "userId": "1",
                "userName": "1"
            },
            {
                "userId": "2",
                "userName": "2"
            }
        ],
        "materialManager": [
            {
                "userId": "1",
                "userName": "1"
            },
            {
                "userId": "2",
                "userName": "2"
            }
        ]
    },
    {
        "deptName": "部门二",
        "deptId": "2",
        "managerType": "asset",
        "assetManager": [
            {
                "userId": "1",
                "userName": "1"
            },
            {
                "userId": "2",
                "userName": "2"
            }
        ],
        "inAssetManager": [
            {
                "userId": "1",
                "userName": "1"
            },
            {
                "userId": "2",
                "userName": "2"
            }
        ],
        "materialManager": [
            {
                "userId": "1",
                "userName": "1"
            },
            {
                "userId": "2",
                "userName": "2"
            }
        ]
    }
]

三、CODE

因为只返回用户的userId和userName的集合,只有两个字段,所以,我用HashMap做了一个小实体,没有新建实体类。

VO:

public class AssetsClassVo {
  // 序号1,业务字段:部门名称:[必须输入]
  private String deptName;
  // 序号2,业务字段:部门ID:指向HR的组织表的部门ID[必须输入]
  private String deptId;
    // 序号3,业务字段:管理员类型:[必须输入]
  private String managerType;
  // 序号3,固定资产管理员ID,name集合(可以看做A类业务类型)
  private List<HashMap<String,String>> assetManager = new ArrayList<>();
  // 序号4,无形资产管理员ID,name集合 (可以看做B类业务类型)
  private List<HashMap<String,String>> inAssetManager = new ArrayList<>();
  // 序号5,耗材管理员ID,name集合 (可以看做C类业务类型)
  private List<HashMap<String,String>> materialManager = new ArrayList<>();
  //----以下是getter setter
  public String getDeptName() {
    return deptName;
  }
  public void setDeptName(String deptName) {
    this.deptName = deptName;
  }
  public String getDeptId() {
    return deptId;
  }
  public void setDeptId(String deptId) {
    this.deptId = deptId;
  }
  public String getManagerType() {
    return managerType;
  }
  public void setManagerType(String managerType) {
    this.managerType = managerType;
  }
  public List<HashMap<String, String>> getAssetManager() {
    return assetManager;
  }
  public void setAssetManager(List<HashMap<String, String>> assetManager) {
    this.assetManager = assetManager;
  }
  public List<HashMap<String, String>> getInAssetManager() {
    return inAssetManager;
  }
  public void setInAssetManager(List<HashMap<String, String>> inAssetManager) {
    this.inAssetManager = inAssetManager;
  }
  public List<HashMap<String, String>> getMaterialManager() {
    return materialManager;
  }
  public void setMaterialManager(List<HashMap<String, String>> materialManager) {
    this.materialManager = materialManager;
  }
}


SERVICE:

@Override
  public List<AssetsClassVo> getAllAssetDeptManagerConfig(List<AssetsClassVo> deptInfoLists) {
    // 查询managerType下的所有数据;
    String managerType = deptInfoLists.get(0).getManagerType(); // 获取manager类型
    List<AssetDeptManagerConfig> configuredLists = this.iAssetDeptManagerConfigDao.findAllByManagerType(managerType);
        // 遍历从库中查出的managerType下的所有数据和部门ID集合。将deptId相同的数据取出,并做整理。
    for(AssetsClassVo asset :deptInfoLists){
      for(AssetDeptManagerConfig configuredManager: configuredLists){
        if(asset.getDeptId().equals(configuredManager.getDeptId())){  // 如果deptId 相同      
          HashMap<String,String> personMap = new HashMap<>();  //新建HashMap,做小实体,放入userId和userName
          personMap.put("userId",configuredManager.getManagerId());
          personMap.put("userName",configuredManager.getManagerName());
          String managerBizType = configuredManager.getManagerBizType(); 
          if(managerBizType.equals(ASSET)){   // 判断业务类型,将装好内容的小实体放到对应的业务类型集合中
            asset.getAssetManager().add(personMap);  
          } else if(managerBizType.equals(IN_ASSET)){
            asset.getInAssetManager().add(personMap);
          } else {
            asset.getMaterialManager().add(personMap);
          }
        }
      }
    }
    return deptInfoLists;
  }

对应关系图

20171125190833381.png

以上是整个过程的关键代码,业务听起来很复杂,拆开理解就可以了。


相关文章
|
人工智能
简单利用AI工具生成动漫头像
【7月更文挑战第14天】简单利用AI工具生成动漫头像
|
安全 前端开发 Java
​springboot代码混淆及反混淆代码工具
​springboot代码混淆及反混淆代码工具
358 0
|
机器学习/深度学习 存储
进制及进制转换详解。原码、反码、移码,补码区别介绍。(通俗易懂)
Ⅰ.进制转换详解。Ⅱ.原码、反码、移码,补码区别介绍。(通俗易懂)
1136 0
进制及进制转换详解。原码、反码、移码,补码区别介绍。(通俗易懂)
|
JavaScript
eslint全局变量报错 xxx is not defined
eslint全局变量报错 xxx is not defined
937 0
|
人工智能 弹性计算 资源调度
“穿越”到虚拟世界笑风生,网易瑶台沉浸式活动平台创新云端活动体验
分布广泛的弹性资源、高稳定系统及专业技术团队,很好地满足了网易瑶台对弹性资源的需求。
“穿越”到虚拟世界笑风生,网易瑶台沉浸式活动平台创新云端活动体验
|
Web App开发 前端开发 JavaScript
Chrome浏览器HTML支持本地(file协议)的AJAX请求
Chrome浏览器HTML支持本地(file协议)的AJAX请求
1076 0
Chrome浏览器HTML支持本地(file协议)的AJAX请求
|
人工智能 数据中心
谷歌或将在台南科技工业园兴建第二座在台数据中心
谷歌或将在台南科技工业园兴建第二座在台数据中心
谷歌或将在台南科技工业园兴建第二座在台数据中心