业务-----部门Service常用逻辑
1.org实体类
public class Org implements Serializable {
private static final long serialVersionUID = 1L;
private String title;
private Long parent;
private List<User> userList;
private List<Org> nodes;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Long getParent() {
return parent;
}
public void setParent(Long parent) {
this.parent = parent;
}
public List<Org> getNodes() {
if(nodes == null){
nodes = new ArrayList<Org>();
}
return nodes;
}
public void setNodes(List<Org> nodes) {
this.nodes = nodes;
}
public List<User> getUserList() {
if(userList == null){
userList = new ArrayList<User>();
}
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
@Override
public String toString() {
return "Org{" +
"createTime=" + createTime +
", title='" + title + '\'' +
", parent=" + parent +
", userList=" + userList +
", nodes=" + nodes +
'}';
}
}
2.查询该部门下的子部门
private List<Org> hasChilds(Long id){
List<Org> orgs = super.selectList(
new EntityWrapper<Org>().eq(Config.ABLE_CONFIG.ABLE_COLUMN,Config.ABLE_CONFIG.ABLE)
.eq("parent",id)
);
List<Org> orgList1 = new ArrayList<>();
for(Org org : orgs){
List<User> userList = userService.getByOrgId(org.getId());
org.setUserList(userList); //同时也查出了该部门下的所有人员
orgList1.add(org);
}
return orgList1;
}
3.查询该部门下的所有部门的id。---应用递归查询出所有的id,放到set集合中
public Set<Long> getAllChildIds(Long id,Set<Long> set) {
if(set == null){
set = new HashSet<>();
}
List<Org> orgList = hasChilds(id);
set.add(id);
for (int i = 0; i < orgList.size(); i++) {
set.add(orgList.get(i).getId());
getAllChildIds(orgList.get(i).getId(),set);
}
return set;
}
4.查询该部门下的所有部门部门---应用递归查询出该部门下的所有部门,放到Org实体类的List<Org> node属性中。(已经在实体类中定义过了)
public Org getAllChildOrgs(Long id) {
Org org = null;
if(id == 0){
org = new Org();
}else {
org = get(id);
}
List<Org> orgList = hasChilds(id);
for(Org org1 : orgList){
Org org2 = getAllChildOrgs(org1.getId());
org.getNodes().add(org2);
}
return org;
}
5.递归删除该部门下所有部门
//递归删除该部门下所有部门
public boolean del(Long id) {
if (id != null){
List<Org> hasResponses = hasChilds(id);
if (!CollectionUtils.isEmpty(hasResponses)){
for (Org orgRsp:hasResponses){
del(orgRsp.getId());
}
}
return delCurrent(id);
}else {
throw new ApplicationException(StatusCode.BAD_REQUEST.getCode(), StatusCode.BAD_REQUEST.getMessage());
}
}
//根据id删除对象
private boolean delCurrent(Long id){
Org org = new Org();
org.setId(id);
org.setIsDeleted(Config.ABLE_CONFIG.UNABLE);
org.setUpdateTime(new Date());
return super.updateById(org);
}
业务-----部门Service常用逻辑的更多相关文章
- 业务-----添加Service常用逻辑
1.参数不能为空 /** * 添加人员时判断是否字段全部传值 * @param request * @return */ private Boolean checkClientByCols(Clien ...
- 业务-----修改Service常用逻辑
注意:修改时唯一属性不能重复 //num==null 时,没有修改Num,不用考虑重复问题.//num!=null 时,修改了num.考虑重复问题 if(!StringUtils.isEmpty(re ...
- Flask基础(06)-->视图常用逻辑
Flask基础(06)-->视图常用逻辑 返回json 重定向:url_for 自定义状态码 返回json:在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中 ...
- 业务型代码常用的SQL汇总(随时更新)
做了一年的业务代码开发,记录并分享一下自己平时在项目中遇到的比较好用的sql 1.查询表中是否某一字段下的数据有重复数据(以ID为例) SELECT id FROM 表名GROUP BY ID HAV ...
- MySQL根据业务场景归纳常用SQL语句
素材表数据:user[{"id":1,"name":"x"},{"id":2,"name":&quo ...
- 数据库及MYSQL基础(3)-JDBC
教学视频链接:https://edu.aliyun.com/course/1694?spm=5176.11400004.0.0.29254768sg2H5P 程序文件链接:https://pan.ba ...
- MSSQL - 逻辑主键、业务主键和复合主键
转载自:http://blog.csdn.net/sunrise918/article/details/5575054 这几天对逻辑主键.业务主键和复合主键进行了一些思考,也在网上搜索了一下相关的讨论 ...
- kubernetes进阶之七:Service
1.概述 Service也是Kubernetes里的最核心的资源对象之一,Kubernetes里的每个Service其实就是我们经常提起的微服务架构中的一个“微服务”,之前我们所说的Pod.RC等资源 ...
- SpringBoot 三层架构 Controller、Service、Dao作用和关系详解
首先创建一个springboot项目. model层 model层也叫pojo层或者entity层,个人比较喜欢pojo层. 一般数据库的一张表对应一个pojo层,并且表中所有字段都在pojo层都一一 ...
随机推荐
- GUI_事件监听机制与ActionListener演示
事件监听机制组成: 事件源:(awt包或者swing包中的那些图形界面组件)(被打的那个人,被点击的组件,可以承受某些事件,但不是所有事件都能承受) 事件:每个事件源都有自己特有的对应事件和共性事件( ...
- CF895C: Square Subsets && 【BZOJ2844】albus就是要第一个出场
CF895C: Square Subsets && [BZOJ2844]albus就是要第一个出场 这两道题很类似,都是线性基的计数问题,解题的核心思想也一样. CF895C Squa ...
- esp8266(2) 智能配置
http://www.arduino.cn/thread-46594-1-1.html http://blog.csdn.net/sadshen/article/details/47049129 ht ...
- Redis的安装和客户端使用注意事项
一.安装 (1)linux环境下: 获得软件包: wget http://download.redis.io/releases/redis-4.0.1.tar.gz 解压:tar -zxvf redi ...
- Java并发(六)线程池监控
目录 一.线程池监控参数 二.线程池监控类 三.注意事项 在上一篇博文中,我们介绍了线程池的基本原理和使用方法.了解了基本概念之后,我们可以使用 Executors 类创建线程池来执行大量的任务,使用 ...
- 上传文件,不依赖 Jquery flash 插件,用到HTML5 input 新属性实现过滤文件格式、同时上传多个文件
1.样式 2.js 3.后台处理 4.效果图 一.样式 <style> .divUpload { position: relative; } .divUploadFirst { width ...
- GZIP压缩提高网络传输效率
[spring]通过GZIP压缩提高网络传输效率(可以实现任何资源的gzip压缩.包括AJAX) gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将 ...
- 利用git向github上远程提交一个自己的开源项目
1.在电脑的系统变量中的path路径中配置git的环境变量: 找到git安装路径中bin的位置,如:X:\Git\bin 找到git安装路径中git-core的位置,如:X:\Git\libexec\ ...
- SkylineGlobe 如何实现FlyTo定位到目标点之后触发的事件函数
之前有朋友问,如何在Skyline里面实现FlyTo定位到目标点之后触发的事件函数呢? 下面的这段代码,就可以帮你解决这个问题. <!DOCTYPE html PUBLIC "-//W ...
- ASP.NET Core 中 HttpContext 详解与使用 | Microsoft.AspNetCore.Http 详解 (转载)
“传导体” HttpContext 要理解 HttpContext 是干嘛的,首先,看图 图一 内网访问程序 图二 反向代理访问程序 ASP.NET Core 程序中,Kestrel 是一个基于 li ...