vhr部門管理模塊更新啦!爲了讓小夥伴們快速理解部門管理模塊實現思路,我想經過3篇短文來給你們介紹下大體的實現思路和核心代碼。本文是[SpringBoot+Vue先後端分離,使用SpringSecurity完美處理權限問題]系列的延續,建議小夥伴們先閱讀前面的文章,會有助於你理解本文。 前端
1.SpringBoot+Vue先後端分離,使用SpringSecurity完美處理權限問題(一)
2.SpringBoot+Vue先後端分離,使用SpringSecurity完美處理權限問題(二)
3.SpringSecurity中密碼加鹽與SpringBoot中異常統一處理
4.axios請求封裝和異常統一處理
5.權限管理模塊中動態加載Vue組件
6.SpringBoot+Vue先後端分離,使用SpringSecurity完美處理權限問題(六)ios
好了,那咱們本文主要來看看數據庫的設計與存儲過程的編寫。 git
部門數據庫總體來講仍是比較簡單,以下: github
都是常規字段,腳本能夠在項目中下載。depPath是爲了查詢方便,isParent表示該條是不是父部門。爲了簡化程序中的邏輯,depPath的設置和isParent的設置我都在存儲過程當中完成。sql
添加部門存儲過程以下:數據庫
DELIMITER $$ USE `vhr`$$ DROP PROCEDURE IF EXISTS `addDep`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `addDep`(in depName varchar(32),in parentId int,in enabled boolean,out result int,out result2 int) begin declare did int; declare pDepPath varchar(64); insert into department set name=depName,parentId=parentId,enabled=enabled; select row_count() into result; select last_insert_id() into did; set result2=did; select depPath into pDepPath from department where id=parentId; update department set depPath=concat(pDepPath,'.',did) where id=did; update department set isParent=true where id=parentId; end$$ DELIMITER ;
關於這個存儲過程,我說以下幾點: axios
1.該存儲過程接收五個參數,三個輸入參數分別是部門名稱、父部門Id,該部門是否啓用,兩個輸出參數分別表示受影響的行數和插入成功後id的值。 後端
2.存儲過程首先執行插入操做,插入完成後,將受影響行數賦值給result。 前後端分離
3.而後經過last_insert_id()
獲取剛剛插入的id,賦給result2。 spa
4.接下來查詢父部門的depPath,而且和剛剛生成的id組合後做爲剛剛插入部門的depPath。
5.將父部門的isParent字段更新爲true。
將這些邏輯寫在存儲過程當中,能夠簡化咱們代碼中的邏輯。
刪除部門也被我寫成了存儲過程,主要是由於刪除過程也要作好幾件事,核心代碼以下:
DELIMITER $$ USE `vhr`$$ DROP PROCEDURE IF EXISTS `deleteDep`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `deleteDep`(in did int,out result int) begin declare ecount int; declare pid int; declare pcount int; select count(*) into ecount from employee where departmentId=did; if ecount>0 then set result=-1; else select parentId into pid from department where id=did; delete from department where id=did and isParent=false; select row_count() into result; select count(*) into pcount from department where parentId=pid; if pcount=0 then update department set isParent=false where id=pid; end if; end if; end$$ DELIMITER ;
關於這個存儲過程,我說以下幾點:
1.一個輸入參數表示要刪除數據的id,一個輸出參數表示刪除結果。
2.若是該部門下有員工,則該部門不能被刪除。
3.刪除該部門時注意加上條件isParent=false,即父部門不能被刪除,這一點我在前端已經作了判斷,正常狀況下父部門的刪除請求不會被髮送,可是考慮到前端的數據不能被信任,因此後臺咱們也要限制。
4.刪除成功以後,查詢刪除部門的父部門是否還有其餘子部門,若是沒有,則將父部門的isParent修改成false。
其餘一些瑣碎的技術就不值得介紹了,你們在源碼中自行研究,有問題歡迎留言討論。
關注公衆號,能夠及時接收到最新文章: