根据ID集合查询符合某种类型的用户信息,并按其他类型分类
2017-11-19 23:28
525 查看
上次在未完成的博客中,描述的业务需求不准确,今天将业务重新描述一下。
配合前端页面,根据部门id集合查询该部门下管理员类型是物资管理员的所有用户的userId,userName,并按部门和业务管理员类型分类;
(物资管理员下还会分三种业务管理员,负责不同的业务)
(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"
}
]
}
]
// 序号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;
}
}
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;
}
以上是整个过程的关键代码,业务听起来很复杂,拆开理解就可以了。
一、页面显示的效果:
配合前端页面,根据部门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:
@Overridepublic 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;
}
对应关系图
以上是整个过程的关键代码,业务听起来很复杂,拆开理解就可以了。
相关文章推荐
- Mybatis根据id查询用户信息
- ibatis学习之--3、根据id查询对应的用户信息
- ibatis学习之--5、根据id删除指定用户的信息
- 根据用户IP地址查询用户信息
- 根据session用户id读取用户信息,age根据当前时间减去birthday
- 根据用户useid查询最近的SQL操作;
- WordPress 查询调用文章所属的分类id,根据文章id查cat分类栏目id方法
- 微信根据openId查询微信用户信息,需要认证服务号。
- javascript 根据给定的id集合查询对应的值,返回 json对象
- oracle 根据表名查询字段的详细信息 字段类型 注释
- 健康知识api根据健康知识ID查询详细信息
- 微信根据openId查询微信用户信息,这个功能需要认证服务号
- MyBatis一对一关系映射:根据班级id查询班级信息并查出辅导员的信息
- php 无限递归查询子id 子类 根据父分类 父ID 查询所有子分类 子ID
- 取出相应用户分类名以及字段id的sql语句(两表查询)
- 7.OAut认证 根据授权码获取用户的ID,SECRET等信息
- 【根据用户ID获取用户信息】
- 根据BDUSS获取用户ID信息
- mysql、oracle、sqlserver根据对应的表查询表中的所有字段名称、类型、别名、长度等信息