Spring Boot中利用递归算法查询到所有下级用户,并手动进行分页

前提:语言用的是kotlin(和Java一样,但更简洁),写下这篇文章用来记录编程过程中遇到的一些难点

1、功能需求

前端用户A点击“我的推荐”后,调用后台的接口,查询到所有的下家(不仅包括直接下家)

如图所示,当前用户A要查询所有下家用户,就是以自己为树的“根”节点,遍历所有下家用户,并返回所有下家:B、C、D、E···。

2、代码实现

//我的推荐
fun queryLower(request: QueryLowerRequestModel,userToken: UserToken): PageData2<QueryLowerResponseModel> {
//创建一个list,用于存储递归后的返回
var mutableList = mutableListOf<String>()
GetMyRecommend(userToken.userId!!,mutableList) var responseList = mutableListOf<QueryLowerResponseModel>() var userAsset = assetRepository.findAll()
for(i in mutableList) {
userAsset.forEach { e ->
if (e.username == i)
{
responseList.add(QueryLowerResponseModel(
userName = i,
baseMoney = e.base_money,
create_time = e.base_money_time,
isDirect = 0
))
}
}
}
var toIndex = (request.pageNo+1)*request.size-1
if( (request.pageNo+1)*request.size > mutableList.size)
{
toIndex = mutableList.size
}
var totalPages :Int = (mutableList.size / request.size)+1 return PageData2(
list = responseList.subList(request.pageNo*request.size,toIndex),
totalNum = mutableList.size.toLong(),
pageNo = request.pageNo,
totalPages = totalPages,
hasMore = false
)
}

其中的GetMyRecommend函数是我自定义的一个递归函数,函数体如下:

    //递归获取我的推荐
fun GetMyRecommend(id:Long ,nameList:MutableList<String> )
{ var userList = usersRepository.selectLowerUsers(id)
if(userList.isEmpty())
{
return
}
else
{
for( i in userList)
{
nameList.add(i)
var userId = usersRepository.findUserEntityByUsername(i)
GetMyRecommend(userId.id,nameList)
}
}
}

可以看到,在递归过程中,每次我都进行了数据库的操作,虽然这样的效率很低,但在敏捷开发过程中,首要的任务就是将功能实现,其次再考虑性能的问题。这个递归我利用了list传地址的特性,每次对list操作都会改变list中的值,这样就记录下来了所有下家。其次进行分页(分页是基础操作),并返还给前端。

Spring Boot中利用递归算法查询到所有下级用户,并手动进行分页的更多相关文章

  1. spring boot中利用mybatis-generator插件生成代码

    使用Idea在spring boot中集成mybatis-generator,自动生成mapper.xml  model  dao 文件 一.配置 pom.xml 在pom.xml的<plugi ...

  2. spring boot 中使用redis session

    spring boot 默认的httpsession是存在内存中.这种默认方式有几个缺点:1.当分布式部署时,存在session不一致的问题:2.当服务重启时session就会丢失,这时候用户就需要重 ...

  3. 利用 Spring Boot 中的 @ConfigurationProperties,优雅绑定配置参数

    使用 @Value("${property}") 注释注入配置属性有时会很麻烦,尤其是当你使用多个属性或你的数据是分层的时候. Spring Boot 引入了一个可替换的方案 -- ...

  4. Spring Boot中使用 Spring Security 构建权限系统

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...

  5. spring boot(三):Spring Boot中Redis的使用

    spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...

  6. Spring Boot中的事务管理

    原文  http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合 ...

  7. Spring Boot中的注解

    文章来源:http://www.tuicool.com/articles/bQnMra 在Spring Boot中几乎可以完全弃用xml配置文件,本文的主题是分析常用的注解. Spring最开始是为了 ...

  8. springboot(十一):Spring boot中mongodb的使用

    mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...

  9. 在Spring Boot中使用swagger-bootstrap-ui

    在Spring Boot中使用swagger-bootstrap-ui swagger-bootstrap-ui是基于swagger接口api实现的一套UI,因swagger原生ui是上下结构的,在浏 ...

随机推荐

  1. 随机线性网络编码的C语言实现,实现可靠传输:原理(1)

    线性方程组,大家都不陌生吧.来一组 A11 *X1 + A12 *X2 + A13 *X3 + A14 *X4 =Q1 A21 *X1 + A22 *X2 + A23 *X3 + A24 *X4 =Q ...

  2. poj 1436 && zoj 1391 Horizontally Visible Segments (Segment Tree)

    ZOJ :: Problems :: Show Problem 1436 -- Horizontally Visible Segments 用线段树记录表面能被看见的线段的编号,然后覆盖的时候同时把能 ...

  3. oracle 用EXISTS替代IN

    在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 低效: SELECT * FROM EMP ( ...

  4. 2012-2013 Northwestern European Regional Contest (NWERC 2012)

    B - Beer Pressure \(dp(t, p_1, p_2, p_3, p_4)\)表示总人数为\(t\),\(p_i\)对应酒吧投票人数的概率. 使用滚动数组优化掉一维空间. 总的时间复杂 ...

  5. 2005年NOIP普及组复赛题解

    题目涉及算法: 陶陶摘苹果:入门题: 校门外的树:简单模拟: 采药:01背包: 循环:模拟.高精度. 陶陶摘苹果 题目链接:https://www.luogu.org/problem/P1046 循环 ...

  6. WOE:信用评分卡模型中的变量离散化方法(生存分析)

    WOE:信用评分卡模型中的变量离散化方法 2016-03-21 生存分析 在做回归模型时,因临床需要常常需要对连续性的变量离散化,诸如年龄,分为老.中.青三组,一般的做法是ROC或者X-tile等等. ...

  7. Codeforces Round #187 (Div. 1 + Div. 2)

    A. Sereja and Bottles 模拟. B. Sereja and Array 维护全局增量\(Y\),对于操作1(即\(a_{v_i}=x\))操作,改为\(a_{v_i}=x-Y\). ...

  8. Mysql5.5升级到5.7的过程已经踩到的坑

    https://blog.csdn.net/u014534986/article/details/79699750 故事是这样子的,我们公司有几台老的mysql版本是5.5的,最近项目做了一些升级增加 ...

  9. Python--day38--进程同步控制的---锁\信号量\事件的方法名

  10. Hex编码

    编码原理 Hex编码就是把一个8位的字节数据用两个十六进制数展示出来,编码时,将8位二进制码重新分组成两个4位的字节,其中一个字节的低4位是原字节的高四位,另一个字节的低4位是原数据的低4位,高4位都 ...