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