java 递归查询用户级所以下级(多层)用户
1.创建用户实体UserTreeVopublic class UserTreeVo {private String id;private List<UserTreeVo> children;public String getId() {return id;}public void setId(String...
·
1.创建用户实体UserTreeVo
public class UserTreeVo {
private String id;
private List<UserTreeVo> children;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public List<UserTreeVo> getChildren() {
return children;
}
public void setChildren(List<UserTreeVo> children) {
this.children = children;
}
}
2.查询该用户下的所有子孙用户 xml:
<resultMap type="com.ssish.saas.constant.db.vo.UserTreeVo" id="userIdTree">
<id property="id" column="id"/>
<association property="children" column="{id=id}" select="selectChildren"/>
</resultMap>
<select id="selectChillersByUserId" resultMap="userIdTree" >
SELECT u.id
FROM hip.`core_user` u
WHERE u.`PARENT_ID` =#{userId} AND
(SELECT COUNT(1) FROM core_channel c WHERE c.status ='1' AND c.ny_ae = u.id ) > 0
</select>
<select id="selectChildren" parameterType="java.util.Map" resultMap="userIdTree">
SELECT u.id
FROM hip.`core_user` u
WHERE u.`PARENT_ID` =#{id} AND
(SELECT COUNT(1) FROM core_channel c WHERE c.status ='1' AND c.ny_ae = u.id ) > 0
</select>
dao层:
List<UserTreeVo> selectChillersByUserId(@Param("userId") Integer userId);
service层:
//内部用户:查询 归属于该内部用户(南燕 AE)及 挂在下级内部用户(可能有多级) 的渠道
List<String> idlist = new ArrayList<>();
List<UserTreeVo> userIdlist = coreProductCorrelationMapper.selectChillersByUserId(userId);
if(userIdlist!=null && userIdlist.size()>0){
List<String> idlist2 = getUserIds(userIdlist); //递归获取用户id
if(idlist2!=null && idlist2.size()>0){
idlist.addAll(idlist2);
}
}
String userIds = String.join(",",idlist);
map.put("userIds",userIds);
//递归出所有用户id
private List<String> getUserIds(List<UserTreeVo> userIdlist){
List<String> ids = new ArrayList<>();
if(userIdlist!=null && userIdlist.size()>0){
for(UserTreeVo vo:userIdlist){
ids.add(vo.getId());
ids.addAll(getUserIds(vo.getChildren()));
}
}
return ids;
}
更多推荐
所有评论(0)