上次在未完成的博客中,描述的业务需求不准确,今天将业务重新描述一下。
一、页面显示的效果:
配合前端页面,根据部门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; }
对应关系图
以上是整个过程的关键代码,业务听起来很复杂,拆开理解就可以了。