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

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

一、页面显示的效果:


配合前端页面,根据部门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;
	}

对应关系图


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

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王师傅66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值