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. Python关键点常识

    关键点常识 Python的发音与拼写 Python的作者是Guido van Rossum(龟叔) Python正式诞生于1991年 Python的解释器如今有多个语言实现,我们常用的是CPython ...

  2. Bootstrap之Form表单验证神器: BootstrapValidator(转)

    前言:做Web开发的我们,表单验证是再常见不过的需求了.友好的错误提示能增加用户体验.博主搜索bootstrap表单验证,搜到的结果大部分都是文中的主题:bootstrapvalidator.今天就来 ...

  3. Activiti7工作流+SpringBoot

    文章目录 一. Activiti相关概念 1. Activiti介绍 2. 核心类 2.1 ProcessEngine 2.2 服务(Service)类 2.2.1 TaskService 2.2.2 ...

  4. 通过PdfiumViewer.dll实现pdf直接从流显示(效果不好)

    开源的PdfiumViewer.dll并不完整 需要不开源的pdfium.dll配合使用 引用只需添加PdfiumViewer.dll,但pdfium.dll必须跟它放在一个路径下 界面中添加控件: ...

  5. 2018-8-10-WPF-调试-获得追踪输出

    title author date CreateTime categories WPF 调试 获得追踪输出 lindexi 2018-08-10 19:16:51 +0800 2018-05-16 1 ...

  6. 怎样判断一个jquery对象是否为空jquery对象

    if ( $('#myDiv').length ){} http://stackoverflow.com/questions/47... 也可以直接判断$('#myDiv')[0]===undefin ...

  7. pytorch实现BiLSTM+CRF用于NER(命名实体识别)

    pytorch实现BiLSTM+CRF用于NER(命名实体识别)在写这篇博客之前,我看了网上关于pytorch,BiLstm+CRF的实现,都是一个版本(对pytorch教程的翻译), 翻译得一点质量 ...

  8. redis常用指令总结以及功能介绍

    第一部分 redis的常用指令 一.针对key的操作 1.1 del key [key .. ]                 , 删除指定的一个或者多个key;1.2 dump key       ...

  9. 原生PHP实现Mysql数据分页功能

    一. 思路整理 实现一个数据分页功能,需要有数据的总条数,每页展示的条数,和当前在第几页这三个参数 通过⌈总条数/每页展示的条数⌉可以得到总页数,比如某留言板有101条留言,每页展示10条,一那就需要 ...

  10. GitHub上传项目到远程库

    写文章 GitHub上传项目到远程库     GitHub上传项目到远程库 今天把想把文件托管到GitHub仓库,但是执行一系列的命令以后,刷新GitHub网站还是没有任何更新.后来终于找到原因,原来 ...