vhr部门管理模块更新啦!为了让小伙伴们快速理解部门管理模块实现思路,我想通过3篇短文来给大家介绍下大致的实现思路和核心代码。本文是[SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题]系列的延续,建议小伙伴们先阅读前面的文章,会有助于你理解本文。
项目地址:https://github.com/lenve/vhr
好了,那我们本文主要来看看数据库的设计与存储过程的编写。
部门数据库整体来说还是比较简单,如下:
都是常规字段,脚本可以在项目中下载。depPath是为了查询方便,isParent表示该条是否是父部门。为了简化程序中的逻辑,depPath的设置和isParent的设置我都在存储过程中完成。
添加部门存储过程
添加部门存储过程如下:
关于这个存储过程,我说如下几点:
1.该存储过程接收五个参数,三个输入参数分别是部门名称、父部门Id,该部门是否启用,两个输出参数分别表示受影响的行数和插入成功后id的值。
2.存储过程首先执行插入操作,插入完成后,将受影响行数赋值给result。
3.然后通过获取刚刚插入的id,赋给result2。
4.接下来查询父部门的depPath,并且和刚刚生成的id组合后作为刚刚插入部门的depPath。
5.将父部门的isParent字段更新为true。
将这些逻辑写在存储过程中,可以简化我们代码中的逻辑。
删除部门存储过程
删除部门也被我写成了存储过程,主要是因为删除过程也要做好几件事,核心代码如下:
关于这个存储过程,我说如下几点:
1.一个输入参数表示要删除数据的id,一个输出参数表示删除结果。
2.如果该部门下有员工,则该部门不能被删除。
3.删除该部门时注意加上条件isParent=false,即父部门不能被删除,这一点我在前端已经做了判断,正常情况下父部门的删除请求不会被发送,但是考虑到前端的数据不能被信任,所以后台我们也要限制。
4.删除成功之后,查询删除部门的父部门是否还有其他子部门,如果没有,则将父部门的isParent修改为false。
其他一些琐碎的技术就不值得介绍了,大家在源码中自行研究,有问题欢迎留言讨论。
关注公众号,可以及时接收到最新文章:
领取专属 10元无门槛券
私享最新 技术干货