根据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

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


相关文章
|
2月前
|
Python
通过 type 和 object 之间的关联,进一步分析类型对象
通过 type 和 object 之间的关联,进一步分析类型对象
68 3
|
JSON API 开发者
如何使用分类ID参数过滤搜索词推荐数据?
一、背景介绍 阿里巴巴中国站的搜索词推荐数据对于开发者来说具有重要的参考价值。通过使用获得搜索词推荐 API,开发者可以获取到用户在平台上的搜索行为数据,了解用户的需求和行为,优化产品和服务。在获取搜索词推荐数据的过程中,有时候需要对数据进行更精细的过滤和分析。其中,分类ID参数是一个非常重要的过滤条件,可以帮助开发者更好地筛选数据。本文将详细介绍如何使用分类ID参数过滤搜索词推荐数据,帮助读者更好地理解和使用该 API。
分组分类的查询与保存
分组分类的查询与保存
163 0
分组分类的查询与保存
|
Java
输入源“/body/sub_mchid”映射到字段“子商户号”必填性规则校验失败,此字段为必填项
输入源“/body/sub_mchid”映射到字段“子商户号”必填性规则校验失败,此字段为必填项
808 0
【自然框架】之通用权限(八):权限到字段(列表、表单、查询)
 通用权限想要写的文章目录:(这是第八章)   1、 简介、数据库的总体结构2、 介绍人员表组3、 介绍组织结构表组4、 介绍角色表组5、 介绍“项目自我描述表组”6、 权限到节点7、 权限到按钮8、 权限到列表(表单、查询)9、 权限的验证10、 资源方面的权限11、 角色管理的程序(给客户用的)12、 权限下放13、 个性化设置A、 【自然框架】之通用权限(外传):杂谈     列表 myGrid 先说一下myGrid,我会根据Manage_FunListCol表和Manage_Columns表的内容,绘制出来一个table,就是的HTML。
919 0
|
SQL 算法 测试技术
Guid算法与标识列(自动增长字段)在表中的应用
Guid算法与标识列(自动增长字段)在表中的应用
186 0
Guid算法与标识列(自动增长字段)在表中的应用
|
XML 设计模式 前端开发
“禁止用 select * 作为查询字段列表”落地指南
《阿里巴巴 Java 开发手册》 MySQL 数据库部分,ORM 映射部分,谈到: 【强制】 在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。 说明: 1)增加查询分析器解析成本。 2)增减字段容易与 resultMap 配置不一致。 3)无用字段增加网络消耗,尤其是 text 类型的字段。 甚至有些公司还会对代码进行扫描,当发现代码或者 MyBatis 配置中出现 `select *` 时会给出告警要求修改。
330 0
“禁止用 select * 作为查询字段列表”落地指南
|
JavaScript 前端开发 Java
6. 自定义容器类型元素验证,类级别验证(多字段联合验证)
6. 自定义容器类型元素验证,类级别验证(多字段联合验证)
|
PHP
Laravel返回不重复的某个字段信息列表
->groupBy('brand_id') ->pluck('brand_id');  学习交流群:364976091
2058 0
|
PHP
Laravel中pluck的使用——返回指定的字段值信息列表
$model = self::where(['is_delete' => 0, 'is_on_sale' => 1]) ->whereIn('goods.cat_id', GoodsCategory::getCategoryIds($category)) ...
2400 0

热门文章

最新文章